Forum: Duyurular RSS
dmd 2.040 çıktı
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: dmd 2.040 çıktı
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
Mengu (Moderatör) #2
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
ubuntu pakedi de var, direkt kurdum :)

selamlar tekrardan :)
http://www.mengu.net - some kind of monster
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Duyurular RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 00:46:14 (UTC -08:00)