November 15, 2016

Dilde bu ve bunun gibi hatalar ne zaman bitecek. Tam anlamıyla kararlı bir sürüm çıkması iyi olur.

Dlang tour u dmd v2.071.0 ile derleyebilirken. dmd v2.072.0 ile derlenemediğini gördüm. Fakat LLVM v2.072.0 sıkıntı çıkartmıyor. 3 sene önce d ile program yazarken de aynı sıkıntı var şimdi de öyle. Her yeni sürüm bir önceki sürüme göre yazılan kodun çalışmamasına sebep oluyor :/ Halen daha düzeltilmesi gereken çok fazla bug var.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 15, 2016

Dün D ile ilgili bir sorunla karşılaştım. const üye işlev içinde this'in ve dolayısıyla üyelerin const olduklarını biliyoruz:

struct S {
   int i;
   int[char[]] aa;

   void foo() const {
       static assert(is(typeof(this) == const(S)));
       static assert(is(typeof(i) == const(int)));
       static assert(is(typeof(aa) == const(int[char[]])));
   }
}

void main() {
}

Buraya kadar güzel... Sorun, const eşleme tablosu üyenin .values niteliğini çağırınca ortaya çıkıyor: Her ne kadar aa'nın üyelerinin kopyaları olsalar ve bu yüzden aa'ya hiçbir etkileri olamasa da, .values'un döndürdüğü dizinin elemanları const(int) oluyor:

       static assert(is(typeof(aa.values[0]) == const(int)));

Bu gereğinden fazla bir kısıtlama çünkü örneğin döndürülen diziyi sıralayamıyoruz:

       auto değerler = aa.values;
       değerler.sort;    // <-- DERLEME HATASI (Error: can only sort a mutable array)

byValue da işe yaramıyor. İki çözüm var:

  1. cast ile tür dönüşümü:
       auto değerler = cast(int[])aa.values;
  1. Döngü kullanmak:
       int[] değerler;
       foreach (değer; aa.byValue) {
           değerler ~= değer;
       }

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]