Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Immutable Sabiti

Konu, 'D Dili' kısmında Salih Dinçer tarafından paylaşıldı.

  1. Salih Dinçer

    Salih Dinçer Üye

    Kayıt:
    24 Şubat 2012
    Mesajlar:
    53
    Beğenilen Mesajlar:
    0
    Merhaba,

    Acaba D dilinde immutable tıpkı bir, C'deki makrolar gibi mi çalışır? Şöyle bir örneğimiz olsun:



    Bu kod hiç bir hata vermeden çalışacaktır. Ancak aralarında önemli farklılıklar olduğunu düşünüyorum. Sanki immutable olanlar, derleme zamanında eşitliği aynen kullanıldığı yere yapıştırıyorlar. O yüzden TEST A bir kere hesaplanıp değeri aktarılıyor olmalı.

    Peki TEST B ile C arasında önemli bir farklılık var mı?

    Derleme zamanında hesaplanabilirlik ile bir ilgisi olduğunu düşünüyorum da...:confused:

    Teşekkürler...
     
  2. acehreli

    acehreli Ali Çehreli

    Kayıt:
    19 Ekim 2002
    Mesajlar:
    4,973
    Beğenilen Mesajlar:
    2
    C makrolarının eşdeğeri D'de yok. Makroların karşılıkları mixin, dizgi import'u, ve enum gibi olanaklar olabilir. Soruya bakılırsa sen makroların sabit değerlerle ilgili olan kullanımı ile ilgileniyorsun.

    O zaman hayır, o çeşit makro kullanımının karşılığı D'de enum'dur. immutable, C'deki 'const'ın beceremediği şeydir: Gerçek değişmezlik.

    Testlerde neyi sorduğunu açar mısın? Benim tek gördüğüm, değişkenlerin değerlerin gerçekten 8 olup olmadığına bakılıyor. Bunun immutable veya enum'la ilgisini göremiyorum.

    Testler de normalde derleme zamanında yapılmıyorlar. 'static assert' olsaydı öyle olurdu. Derleme zamanında işletilebilme (CTFE) konusu enum veya immutable'ı gerektirmiyor. Şöyle düşünmek gerek: Değer derleme zamanında gerekiyorsa derleme zamanında işletilebilmelidir.

    Derleme zamanında gereken değerler:

    * enum değerler

    * Değer çeşidinden şablon parametreleri

    * mixin ile kullanılan string değerleri

    * static ve immutable olan üyelerin değerleri (galiba)

    * Belki başka da...

    Benim bu konuda bildiklerim şurada yazdıklarım:

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

    Ve biraz da şunlar:

    * http://ddili.org/ders/d/kosullu_derleme.html

    * http://ddili.org/ders/d/sablonlar_ayrintili.html

    * http://ddili.org/ders/d/katmalar.html

    Ali
     
  3. Salih Dinçer

    Salih Dinçer Üye

    Kayıt:
    24 Şubat 2012
    Mesajlar:
    53
    Beğenilen Mesajlar:
    0
    Hocam sonradan bir kaç deneme yaptım da sorun immutable'da değil sizeof'da galiba...:aglama:

    Şöyle ki;

    Uygulamanın başlangıcında veya başka yerde (tıpkı yukarıda üç farklı şekilde yazdığım gibi!) bir türün bellekte kaplayacağı alanı hesaplatıyorum. Sonra bu değeri inanılmaz fazlalıkta bir döngü içinde çalıştırıyorum. Bunun yerine elle 8, 16, 32, 64 yazdığımda herhangi bir yavaşlık meydana gelmiyorken sizeof'un kullanıldığı değişken çağrıldığında, hızlı bir işlemcide 3-5 sn.'ye varan ek gecikme oluyor!

    Sanırım assembly kodlarına bakmalıyım...
     
  4. acehreli

    acehreli Ali Çehreli

    Kayıt:
    19 Ekim 2002
    Mesajlar:
    4,973
    Beğenilen Mesajlar:
    2
    Sorunun temelinde hız konusu olduğunu hiç anlamamışım; kusura bakma. Ben hep anlamsal açıdan bakmışım. Hız konusunun bir çok etkene bağlı olduğunu biliyorsun. Küçük kodunu görsek belki eniyileştirme yapılıp yapılamacağını anlarız. Veya, gdc zaten farkettirmiyordur.

    Ali