November 03, 2010

Uyarı: bu hiç önemli bir konu değil... :)

D'nin en güçlü olanaklarından birisi, işlevlerin derleme zamanında da işletilebilmeleri. CTFE (compile time function evaluation) denen bu olanağı şurada "Derleme zamanında işlev işletme" başlığında anlatmaya çalışmıştım: :)

http://ddili.org/ders/d/islevler_diger.html

Orada, dizginin gerçekten de derleme zamanında oluşturulmuş olduğunu programın içine bakarak göstermeye çalışmıştım; Linux konsollarındaki strings programını kullanmıştım:

$ strings deneme | grep -A 4 Tatl

Onun yerine pragma(msg) da kullanılabilirmiş.

"99 Bottles of Beer" şarkısı (tekerlemesi?) programı sitesini daha önce de görmüştük. Şu program, bütün sözleri derleme zamanında oluşturuyor ve sonucu pragma(msg) ile derleme zamanında ekrana yazdırıyor:

http://www.99-bottles-of-beer.net/language-d-1212.html

Bir örnek:

string bar(string mesaj)
{
   return mesaj ~ " bar";
}

string foo(string mesaj)
{
   return bar(mesaj ~ " foo");
}

pragma(msg, foo("ğş"));

Tabii o program main işlevi bulunmadığı için oluşturulamaz ve bir sürü bağlayıcı hatası oluşur; ama olsun, o hata mesajlarından hemen önce "ğş foo bar" da yazdırılıyor. :)

Diğer bir sorun, yukarıdaki string'leri dstring yapınca ortaya çıktı. Herhalde derleme ortamı ile konsolun bir etkileşimi olmalı. Şu noktada dert etmiyorum. :/

D'nin yalnızca üç pragma'sı varmış:

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

Başka derleyiciler kendileri başka da tanımlayabiliyorlar.

Ali

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