January 30, 2010

Bazı ilginç noktalar:

  • Doğal olarak bazı hatalar giderilmiş

  • Çoğunlukla CTFE ile ilgili gelişmeler var. CTFE, "compile time function evaluation"ın kısaltması; işlevlerin derleme zamanında çağrılabilmeleri ve sonuçlarının derleme zamanında kullanılabilmesi anlamına geliyor.

  • dmd'ye bağlayıcının .map dosyasını oluşturan -map seçeneği eklenmiş (nasıl kullanıldığını bilmiyorum :) )

  • Arayüzlere (interface) 'static' ve 'final' işlevler eklenebiliyor.

'static' herhalde sınıflardan bildiğimiz, üyelere erişemeyen işlev anlamına geliyor. Bu işlevlerde gizli 'this' göstergesi bulunmadığı için, sınıfın yalnızca başka static işlevlerini çağırabilirler.

'final' olan işlevlerin tanımı alt sınıflarda değiştirilemiyor.

D.ershane'ye eklemek gerekecek... :)

Bunları şu programla denedim:

import std.cstream;

interface I
{
   // Alt sınıf(lar) tarafından tanımlanması şart
   void normal();

   // static işlevler 'this' göstergesine sahip değildirler
   static void s0()
   {
       dout.writefln(typeof(this).stringof);

       // Olur: static'ten static çağrılabilir
       s1();

       // HATA: static işlevden static olmayan işlev
       // çağrılamaz
//         normal();

       // HATA: Aynı nedenle...
//         f0();
   }

   static void s1()
   {}

   // Alt sınıf(lar) bunun tanımını değiştiremez
   final void f0()
   {
       f1();
       normal();
       s0();
   }

   final void f1()
   {}
}

class C : I
{
   // Güzel: tanımını değiştirebiliriz
   void normal()
   {
       // Üst sınıfın static işlevini çağırabiliriz
       s1();

       // Üst sınıfın final işlevini çağırabiliriz
       f1();
   }

   // Bunu ilginç buldum: Üst sınıfın static işlevinin tanımı
   // değiştirilebiliyor. Bunun C++'da da olan ilginç bir
   // etkisi var (main içinde söylüyorum)
   void s0()
   {
       dout.writefln(typeof(this).stringof);
   }

   // HATA: final işlevin tanımı değiştirilemez
//     void f0()
//     {}
}

void main()
{
   auto c = new C;
   c.normal();
   c.s1();
   c.f1();

   // C arayüzünü kullandığımız için bu 'C' yazdırıyor
   c.s0();

   // Aynı c nesnesini I arayüzü ile kullanıyoruz; bu sefer
   // 'I' yazdırıyor. Yani aynı nesne olsa da, eriştiğimiz
   // arayüzün sunduğu işlev geçerli oluyor.
   I i = c;
   i.s0();
}

Ali

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

February 26, 2010

ubuntu pakedi de var, direkt kurdum :)

selamlar tekrardan :)

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