October 31, 2016

http://dlang.org/changelog/2.072.0.html

İlginç değişiklikler:

  • Virgül işlecinin değerinin kullanılması emekliye ayrıldı (deprecated). Bu işleç C, C++, ve önceki D'de şu anlama geliyordu: virgüllerle ayrılmış ifadeleri yazıldıkları sırada işlet ve sonuçta sonuncu ifadenin değerini kullan:
void main() {
   int a;
   int sonuç = (++a, ++a, a + 10);
   assert(sonuç == 12);    // Değer, a + 10'dur:
}

Hatalara ve karışıklıklara neden olduğundan virgül işlecinin değerinin kullanılması artık D'de emekliye ayrıldı. (Bunu C'ciler ve C++'çılar da bunu büyük hevesle beklerler.) Virgül işleci bütünüyle kaldırılamadı çünkü for döngüsünün ilerletme bölümünde kullanımı çok yaygın:

   for ( ;  ; ++i, ++j) {    // bu kullanım hâlâ geçerli ve zaten hatalı bir durum yok
       // ...
   }

Yakın zaman önce kendi başımdan geçen virgül işleci anıları:

  1. DConf 2016'daki sunumumda doğru olduğunu düşündüğüm aşağıdaki yapıyı kullanmış ve bir saydamda göstermiştim:
   synchronized (kilitA, kilitB) {
       // ...
   }

O, hesapta her iki kilidin de kilitlenmesini gerektiren bir deyim ve Andrei'nin kitabında da geçiyor. Meğerse 'synchronized''ın bu kullanımı henüz gerçekleştirilmemiş. Derleyicinin hata vermemesinin nedeni ise parantez içindeki ifadenin virgül işleci olması ve bütün deyimin şuna dönüşmesiymiş:

   synchronized (kilitB) {
       // ...
   }

Hatta, Steve Schveighoffer hatayı sunumum sırasında göstermişti ve o olay virgül işlecinin sonunda dilden çıkartılmasına neden olmuştu. Dolaylı da olsa katkı sağlamış oldum! :p

  1. Çalıştığım yerde karşılaşılan bir performans sorununda istenmeden yazılmış bir parantez nedeniyle parametreler arasında olması gereken bir virgül, virgül işleci olarak algılanmış ve 'lazy' olması gereken bir ifadenin hevesle işletilmesine neden olmuş. (Tam ayrıntısını bilmiyorum.)
  • Dizgi sabitlerinin otomatik olarak birleştirilmeleri emekliye ayrıldı. Birleştirilmeleri istendiğinde aralarına '~' koyulması gerekiyor. (Derleme zamanında olduğundan bunun bir performans maaliyeti yok.)
   string[] arr = [ "Hello", "buggy" "World" ];  // Hata: İstenmeden iki elemanlı dizi oluyor (üç yerine)
  • 'FILE''a ek olarak yeni 'FILE_FULL_PATH' geldi:
   // Ek olarak, pragma(msg)'ın birden fazla parametre alabildiğine de dikkat edin.
   // Bunu kısa zaman önce öğrenmiştim.
   pragma(msg, "Bu kaynak dosyanın adı     : ", __FILE__);
   pragma(msg, "Bu kaynak dosyanın tam yolu: ", __FILE_FULL_PATH__);

Kitapları güncelledim:

http://ddili.org/ders/d/index.html

Ali

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

November 05, 2016

Gerçek hayat hikayeleri her zaman ilgi çekici ve öğretici olur. Ali bildiğim kadarıyla artık tüm gün D yazıyorsun :) Ara ara bizimle karşılaştığın ilginç vakaları paylaşır mısın? Hem D ile ilgili olması hemde senin güzel anlatımınla çok keyifli olacağına eminim.

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