Forum: Duyurular RSS
dmd 2.041 çı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.041 çıktı
  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
acehreli (Moderatör) #2
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ı
İ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
canalpay (Moderatör) #3
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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 ?
acehreli (Moderatör) #4
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ı
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
acehreli (Moderatör) #5
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ı
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
acehreli (Moderatör) #6
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ı
Bu sürümde dizi bellekleriyle ilgili kötü bir hata varmış; kullanmayın diyorlar:

  http://www.digitalmars.com/webnews/newsgroups.…?art_grou…

Ali
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:38:31 (UTC -08:00)