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ı:
- 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
- Ç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. ]