Thread overview
March 07, 2010

http://www.digitalmars.com/d/2.0/changelog.html

Yeniliklerden bazıları:

  • İşleç yükleme yazımında farklılıklar. Eskiden işleç işlevlerinin özel isimleri vardı. Örneğin a+b işlemindeki + ikili işlecinin işlev ismi opAdd idi. Artık bütün ikili işleçler opBinary şablon ismine sahip.

Hangi işlecin tanımlanmakta olduğu, o şablonun string türünden parametresi olarak belirtiliyor. + işleci için: 'opBinary!"+"'.

(D.ershane'de yine değişiklikler gerekiyor! Biraz hevesim kırıldı... :))

  • Uyarıları hata olarak kabul etmeyen derleyici seçeneği -wi (-ww da olabilir; daha bakmadım)

  • Bir elemanın eşleme tablosunda bulunduğunu bildiren in'in tersi olan, yeni !in yazımı. Eskiden, "yok ise" anlamına gelmesi için örneğin 'if (!(a in tablo))' yazmak gerekiyordu. Şimdi 'if (a !in tablo)' yazılabiliyor.

Ve doğal olarak bazı hatalar giderilmiş.

Ali

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

March 08, 2010

Alıntı:

>

Yazım hatalarına karşı "fooBar mı demek istediniz?" diye öneride bulunuyor. Gerçekten garip bir olanak... :)

Bende dmd 2.041'i kurdum ve biraz inceledim.

Eğer şöyle bir kod yazarsak :

   struct S
   {
       int fooBar;
       int foBar;
       int sooBaz;
   }

   void main()
   {
       S s;
       s.fooBaz = 1;
       s.foBaz = 1;
   }

Şöyle bir yanıt veriyor :

deneme.d(11): Error: no property 'fooBaz' for type 'S', did you mean 'sooBaz'?
deneme.d(11): Error: constant s.fooBaz is not an lvalue
deneme.d(12): Error: no property 'foBaz' for type 'S', did you mean 'foBar'?
deneme.d(12): Error: constant s.foBaz is not an lvalue

Müthiş mi ? Bence çok iyi değil. Belkide ayarları vardır ben ayarlamadığım için öyledir ?
Ben ne beklerdim.

deneme 11.satırda acaba sooBaz mı demek istediniz yerine, acaba sooBaz yada fooBar (hatta foBar'ıda önerebilir ) mı demek istediniz demesini isterdim. Yani ayarlarında en az şu kadar yanıt ile cevap ver demeli idi bence.

Ve şuan yine baktığımda eğer fsoBar diye değişkeni tanımladığınızda fooBaz diye çağırdığımızda ne yazıkki hiç bir öneri vermiyor. Yani birden değişkende birden fazla harf hatası ile yazamazmışım onu anladım.

Ve şimdi yine baktım ne yazık ki değişken adı olarak adanadangeldim yerine adanadanGEldim dersek yine bir şey önermiyor. Bu da bana saçma geldi.

Yanii güzel olanak ama bence çok düşünülmeden konmuş bir olanak. Ben bu iş için python ile daha önce bahsettiğim gibi daha iyisini yapmıştım. Belki şöyle bir şey diyeceksiniz; eğer senin dediğin şekilde yaparlarsa çok yavaş derslenir. Doğru bir şey dersiniz ama en azından benim dediğim şekilde ayarlanabilmesi iyi olurdu. Ama bu herhalde en başında derleyicinin işi olmadığı için iyi bir şekilde yapmamışlar ?

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

March 08, 2010

İlginç bir olanak, "basit yazım denetimi". Digital Mars d.D haber grubundan kopyalıyorum:

test.d:
   struct S
   {
       int fooBar;
   }

   void main()
   {
       S s;
       s.fooBaz = 1;
   }

Compilation:
  dmd test.d

  test.d(9): Error: no property 'fooBaz' for type 'S',
  did you mean 'fooBar'?
  test.d(9): Error: constant s.fooBaz is not an lvalue

Yazım hatalarına karşı "fooBar mı demek istediniz?" diye öneride bulunuyor. Gerçekten garip bir olanak... :)

Ali

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

March 08, 2010

Bence de derleyicinin işi olmamalı. Derleyici zaten hata veriyor işte. O satıra bakınca anlayabiliriz. :)

Belki de başka dillerde bulunan bir olanak olduğu için almışlardır; bilmiyorum.

Henüz hatalarına veya eksikliklerine fazla takılmamak gerek; daha çok yeni... :)

Ali

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

March 08, 2010

Tür dönüşümü işlecini yükleyen opCast de artık birden fazla tür için tanımlanabiliyormuş. Eskiden belirli bir yapı veya sınıf nesnesini cast ile tek bir türe dönüştürebiliyorduk.

Yine haber grubundan bir örnek kopyalıyorum:

import std.stdio: writeln;

struct Foo {
   int len;

   this(int x) {
       this.len = x;
   }

   T opCast(T:bool)() {
       return this.len != 0;
   }
   T opCast(T:int)() {
       return this.len;
   }
}

void main() {
   auto f = Foo(5);

   if (f)
       writeln("true");
   else
       writeln("false");

   writeln(cast(int)f);
}

Bence bu gerekli bir ek... İşin garibi, zaten C++'da bulunan bir olanak olduğuna göre, ve eğer D gerçekten C++'dan türediyse; neden bu olanağı durdurmuşlardı da tekrar geri koydular? :)

Ali

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

March 11, 2010

Bu sürümde dizi bellekleriyle ilgili kötü bir hata varmış; kullanmayın diyorlar:

http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.announce&article_id=17841

Ali

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