Forum: Duyurular RSS
Yeni ders: Şablonlar
Sayfa:  1  2  sonraki 
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ı: Yeni ders: Şablonlar
  http://ddili.org/ders/d/sablonlar.html

Ali
canalpay (Moderatör) #2
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ı
Bir örnek deneyim dedim ancak hata verdi:
import std.cstream; //1.satır
void main()
{
    T giriştenOku(T)(string soru)
    {
        dout.writef(soru, ": ");
 
        T cevap;
        din.readf(&cevap);
 
        return cevap;
    }
    T giriştenOku(T : string )(string soru) //13.satır
    {
        dout.writef(soru, ": ");
 
        char[] cevap;
        din.readf(&cevap);
 
        return cevap.idup;
    }    
}//22.satır 
Ancak hata verdi :
isimsiz.d(13): found 'giriştenOku' when expecting ';' following statement
isimsiz.d(13): found ':' when expecting ')'
isimsiz.d(13): found 'string' when expecting ';' following statement
isimsiz.d(13): found ')' instead of statement
isimsiz.d(22): unrecognized declaration
acehreli (Moderatör) #3
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ı
Şablon tanımlarının evrensel isim alanına çıkartılması gerek:

T giriştenOku(T)(string soru)
{
    // ...
}
 
T giriştenOku(T : string )(string soru)
{
    // ...
}
 
void main()
{
    // ...
}

Doğrusu, bunun şart mı olduğunu veya bir dmd garipliği mi olduğunu bilmiyorum ama bana böylesi zaten daha doğal geliyor.

Şimdi D2 kurallarına baktım. Şablon sayfasında böyle bir kısıtlamadan bahsedilmiyor.

Ama main bir işlev olduğuna göre, işlev kurallarına baktım:

  http://digitalmars.com/d/2.0/function.html

İçlerinde BlockStatement bulunabiliyor.

BlockStatement'in tanımında da Statement'lar bulunabiliyor. Statement'ların içindeki NonEmptyStatement'lar arasında da şablon (template) bulunmuyor:

  http://digitalmars.com/d/2.0/statement.html#NonEmptyStatem…

Buna bakarak işlev içlerinde şablon tanımlanamayacağının bir kural olduğunu düşünebiliriz. Ama o da doğru değil, çünkü şablon özellemesini yazana kadar çalışıyor.

Şu da çalışıyor:

void main()
{
    class C(T)
    {}
 
    C!int c;
}

Gerçekten emin değilim; ama zaten evrensel alanda tanımlanmaları çok doğal geliyor.

Ali
canalpay (Moderatör) #4
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ı
Şablon tanımlarının evrensel isim alanına çıkartılması gerek:

Şimdi denediğim kadarıyla Şablon tanımının evrensel isim alanına(Eğer işlev içinde olmazsa evrensel isim alanı mı deniyor?) çıkartılması gerekmiyor. Ancak eğer şablon özellemesi var ise (: karakteri içeren şablon demek istedim.) evrensel isim alanına çıkarılması gerekiyor. Benim denediğim kadarı ile böyle. Ancak neden şablon özellemesi var iken evrensel alana çıkarılması gerekiyor daha anlayabilmiş değilim.

Foruma sormalımıyız ? Şablon özellemeleri evrensel alanda mı olmalı ? Sadece normal şablon tanımlanması nerede olmalı ? Şuan ki davranış doğru mu diye ?
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ı
Evet, "global namespace" yerine "evrensel isim alanı" dedim.

Sen sormak ister misin? İşlev içindeki şablon özellemesine "function-local template specialization" demeli.

Ayrıca, "template specialization" diye aratınca dmd'nin bir çok hatası var; bu bulduğun onlardan birisiyle ilgili olabilir:

  http://d.puremagic.com/issues/buglist.…?quicksearch=temp…

Ali
canalpay (Moderatör) #6
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ı
Sen sormak ister misin? İşlev içindeki şablon özellemesine "function-local template specialization" demeli.


Sormak isterim ancak ingilizce nasıl bir yazı yazmalıyım bilmiyorum.
Şöyle bir mesaj uygun olur mu ? (Özellikle ingilizce yönünden):

Konu : function-local template specialization

Mesaj :
Code :
import std.cstream; //1.line
void main()
{
    T input(T)(string soru)
    {
        dout.writef(soru, ": ");
 
        T answer;
        din.readf(&answer);
 
        return answer;
    }
    T input(T : string )(string soru) //13.line
    {
        dout.writef(soru, ": ");
 
        char[] answer;
        din.readf(&answer);
 
        return answer.idup;
    }   
}//22.Line

Error code:
isimsiz.d(13): found 'input' when expecting ';' following statement
isimsiz.d(13): found ':' when expecting ')'
isimsiz.d(13): found 'string' when expecting ';' following statement
isimsiz.d(13): found ')' instead of statement
isimsiz.d(22): unrecognized declaration

Why does an error?

Why not give second example error if the problem is the global namespace?
Second example:
import std.cstream;
void main()
{
    T input(T)(string soru)
    {
        dout.writef(soru, ": ");
 
        T answer;
        din.readf(&answer);
 
        return answer;
    }
}
acehreli (Moderatör) #7
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ı
Fazla karışmış oluyorum ama benim öneriler böyle... :/

Öneği iyice küçültebilirsin. Bu da aynı hatayı veriyor:

void main()
{
    T input(T)()
    {}
 
    T input(T : string)()
    {}
}

Ayrıca bir hata daha keşfettim. T döndürmek yerine void döndürünce hata farklı oluyor:

void main()
{
    void input(T)()
    {}
 
    void input(T : string)()
    {}
}

Bu durumdaki hata:

deneme.d(19540): Error: declaration input(T : string) is already defined

İngilizceler olarak da kısaca "Shouldn't that work?" (çalışması gerekmez mi?) denebilir. Ek olarak, "there is no problem when the templates are in the global namespace." dense yeter. (Senin ikinci örneğinde tanımlar evrensel alanda değildi ve özelleme unutulmuştu.)

Ali
canalpay (Moderatör) #8
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ı
Fazla karışmış oluyorum ama benim öneriler böyle... :/

Lütfen biraz daha karışın yoksa ingilizce olarak hiç bir derdimi anlatamayacağım. Ben ingilizce delete yerine ne kullanabilirim demeye çalışıyorum yanıt olarak ta delete güvensiz, gerçekten onu kullanmak istemezsin diye bir yanıt alıyorum.

Senin ikinci örneğinde tanımlar evrensel alanda değildi ve özelleme unutulmuştu.)


Biliyorum. Şunu demeye çalıştım. Özelleme olmayınca evrensel alanda çalışmasada oluyor. Özelleme olunca neden olmuyor.  Bu ne perhiz bu ne lahana turşusu demek istedim.

Şu halde mi yollayayım :
Konu : function-local template specialization

mesaj :

void main()
{
    T input(T)()
    {}
 
    T input(T : string)()
    {}
}

Error message :

isimsiz.d(6): found 'input' when expecting ';' following statement
isimsiz.d(6): found ':' when expecting ')'
isimsiz.d(6): found 'string' when expecting ';' following statement
isimsiz.d(6): found ')' instead of statement
isimsiz.d(8): unrecognized declaration
 
Shouldn't that work?"

And

void main()
{
    void input(T)()
    {}
 
    void input(T : string)()
    {}
}

Again, Shouldn't that work?"

Error message:
isimsiz.d(6): Error: declaration input(T : string) is already defined

there is no problem when the templates are in the global namespace. (Eğer küresel alanla ilgili sorun yok diyorsak nereden biliyoruz ? Belki küresel alanda sorun olması yanlış.)

Birde konuyu nerede açayım. D.Learn'de açarsam hata varsa hata olduğu anlaşılamaz bence.
acehreli (Moderatör) #9
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ı
canalpay:
Şu halde mi yollayayım :
Konu : function-local template specialization

O başlığın sonuna bir de "error" yakışır. :)

mesaj :

void main()
{
    T input(T)()
    {}
 
    T input(T : string)()
    {}
}

Error message :

isimsiz.d(6): found 'input' when expecting ';' following statement
isimsiz.d(6): found ':' when expecting ')'
isimsiz.d(6): found 'string' when expecting ';' following statement
isimsiz.d(6): found ')' instead of statement
isimsiz.d(8): unrecognized declaration
 
Shouldn't that work?"

And

void main()
{
    void input(T)()
    {}
 
    void input(T : string)()
    {}
}

Again, Shouldn't that work?"

Sonlarında çift tırnak kalmış.

Error message:
isimsiz.d(6): Error: declaration input(T : string) is already defined

there is no problem when the templates are in the global namespace. (Eğer küresel alanla ilgili sorun yok diyorsak nereden biliyoruz ? Belki küresel alanda sorun olması yanlış.)

Özelleme olanağı diye bir şey var ve evrensel alanda çalışıyor (ben denedim :)). Zaten beklenen de o. Soru şu: özellemenin bir işlev içindeyken çalışmıyor olması bir hata mı, yoksa zaten işlev içindeki özellemeler desteklenmiyor mu?

Bana sorarsan bir derleyici hatası; ve onlar da zaten "lütfen bir bug report aç" diyecekler.

Birde konuyu nerede açayım. D.Learn'de açarsam hata varsa hata olduğu anlaşılamaz bence.

Bence orası uygundur. Steven Schveighoffer orayı izliyor. Ama D grubu da olur.

Ali
canalpay (Moderatör) #10
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ı
d.learn'de açtım. Burada: http://www.digitalmars.com/webnews/newsgroups.…?art_grou…

Şuanlık şu şekilde ilerliyor:
Ben mesajı girdim:
->bearophile:
    D2'de işlev içinde şablon tanımlayamazsın:
-->Ben
        Teşekkürler, Ancak bu örnek çalışıyor:
void main()
{
    T input(T)()
    {}
 
}
 
Neden ?

Şimdi yine bearophile yanıtlamış. Haklısın diye başlıyor, ancak nasıl devam ediyor daha çözemedim :-)
acehreli (Moderatör) #11
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ı
Senden öğrenmiş olduğunu söylüyor. :)

Şimdiki kurallara göre iç işlevlerin yüklenemediklerini ve istersen D2'nin bu yönde geliştirilmesini istemeni, hatta dmd'ye bunu sağlayan kod eklemeni, bu sayede de bir gün gerçekleştirilme şansının olacağını söylüyor. :)

Ali
canalpay (Moderatör) #12
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ı
hatta dmd'ye bunu sağlayan kod eklemeni, bu sayede de bir gün gerçekleştirilme şansının olacağını söylüyor. :)


Tamam hemen C öğreniyorum :-D D ile yazamadığıma göre C'yide bilmediğime göre aslında bir derleyici geliştirmek istesemde bu imkansız.

Şimdiki kurallara göre iç işlevlerin yüklenemediklerini ve istersen D2'nin bu yönde geliştirilmesini istemeni,

Bunu nerede istiyeceğim ? Daha doğrusu Andrei beni takar mı nereye yazsam takar?
acehreli (Moderatör) #13
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ı
Ana D forumuna yazılmalı. "Şöyle yapılamıyor, sizce önemli bir eksiklik mi" diye genel olarak sorulursa başkalarının ne düşündükleri de çıkar ortaya. Aslında biraz beklersek .learn forumunda başka fikirler de olabilir.

Ali
Kadir Can #14
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #12
canalpay:
Bunu nerede istiyeceğim ? Daha doğrusu Andrei beni takar mı nereye yazsam takar?

Son cümle çok güzel.canalpay,herhangi bir resmi foruma yazarsan takar.Zaten takmak zorunda.D dilini milyarlarca insan bilmiyor.Bilenler ise dili oluşturanlar için çok önemlidir.Sen yaz,takmazlarsa bastırırız.
canalpay (Moderatör) #15
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ı
Kadir Can:
Zaten takmak zorunda.D dilini milyarlarca insan bilmiyor.Bilenler ise dili oluşturanlar için çok önemlidir.Sen yaz,takmazlarsa bastırırız.
Biraz Andrei'yi kaprisli biri olarak görüyorum. Ayrıca dün yatmadan önce saydım 140 tane mesaj vardı(ki daha amerikada gün bitmemiştir.) görememe ihtimalinide ortadan kaldırmak gerekiyor. Sanırım D'nin tam olarak bizim bulduğumuz şey için varsayılan bir kuralı yok.

Kadir Can:
herhangi bir resmi foruma yazarsan takar

Bence en büyük sorun ingilizce olarak bunu belirtmem. İngilizce kendimi ifade edemiyorum :-) Önerimi nasıl yapacağım ? Nasıl yazacağım ?


acehreli:
Aslında biraz beklersek .learn forumunda başka fikirler de olabilir.

learn pek takılmıyor diye biliyorum, Andreinin dikkatini çekecek kadar çok fikir çıkmaz.. Ancak ben bir yazı hazırlayana kadar(Belki D3 çıkmış olur. :-) )  fikir çıkabilir :-)
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:
Sayfa:  1  2  sonraki 
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-21, 11:04:51 (UTC -08:00)