1. Anasayfa
  2. ASP.Net

DLR (Dynamic Language Runtime) Nedir?


0

DLR konusuna geçmeden önce CLR (common language runtime)’a kısaca değinip, DLR avantajlarına sahip olmadan işlerin nasıl yürüdüğüne bir bakalım istedim.

Aşağıdaki şema bize işlerin nasıl işlediğini özetlemektedir.


Resim-1

Yazdığımız .Net kodu derleyici tarafından derlendiğinde, Common Intermadiate Language denilen bir ara dile çevrilir.

Uygulamamız çalıştırıldığında JIT(Just In Time Compiler) derleyicisi bu ara dile çevrilmiş kodları, bulunduğu işlemci ve işletim sisteminin anlayacağı şekilde makina diline çevirir ve böylelikle uygulamamız çalışmış olur.

Dynamic tipler bize derleme zamanında yapılan doğrulama işlemlerine tabi tutulmaksızın .Net kodumuzun derlenmesine olanak sağlamaktadır. Dynamic tipler ile ilgili hatalar derleme zamanında alınmaz. Ancak bir hata varsa bu çalışma zamanında fırlatılacaktır.

DLR .Net 4.0 ile gelen bir özellik olup, System.Dynamic kütüphanesinin referans olarak verilmiş olması gerekmektedir.

Şimdi isterseniz basit bir örnek yapalım. Yeni bir consol projesi açıyorum ve adınıDlrSimpleSample olarak belirliyorum. Framework versiyonunu 4.0 seçtim, ancak 4.0 sonrası dilediğiniz bir versiyonu da seçebilirsiniz.

Şimdi aşağıdaki örneği inceleyelim.


Resim-2

Öncelikle 2 tane int tipinde değişken tanımladım ve bunlara değer atadım. Sonra  var keyword’ü ile sayi3 isimli değişkeni tanımladım ve 1 değerini atadım. sayi3 değişkenine değer atadığım anda artık bu değişken otomatik olarak int tipi olarak belirlenmiş oldu.
Bir alt satırda var keyword’ü ile oluşturup değer atayarak int tipi olarak belirlenen sayi3 değişkenine string bir ifade verip kodumu derlemeye tabi tuttuğumda derleme zamanında hata aldım.

Oysa dynamic keyword’ü ile sayi4 olarak belirlediğim değişkene önce string bir değer daha sonra da int tipinde bir değer atamak istediğimde derleyici bunu kontrol etmedi ve derleme zamanında bu satır için hata almadım.

Şimdi kodumuzu, hata almayacak şekilde düzenleyip çalıştıralım ve sonuçları inceleyelim.


Resim-3

Çalışan örneğimizde önce sayıların toplama işlemini dynamic tipindeki “sonuc” değişkenimize atadım. Daha sonra bu toplama işlemini ekrana yazdırdım.

Bir alt satırda dynamic tipindeki “sonuc” değişkenini 2’ye bölerek ekrana yazdırdım.

En son olarak da “sonuc” değişkenine string bir ifade atayıp bunu ekrana yazdırdım. Burada dynamic tipi hem derleme zamanında hem de çalışma zamanında atanan tüm tiplerdeki değişkenlere adapte olarak çalıştı. Aynı javascript’te kullanılan var keyword’ü gibi.


Resim-4

Şimdi biraz daha karmaşık bir bir örnek yapalım. Yeni bir console projesi açıp DlrLitleBitComplexSample olarak isimlendirdim.

Aşağıdaki kodlamada gördüğünüz gibi dynamic keyword’ü ile bir nesne yarattım ve ExpandoObject sınıfından yeni bir instance atadım. Böylelikle nesneme dinamik olarak property ekleyebilirim. Bunu esnekliğe sahip olduğumuzda ise malesef intellisense’den feragat etmek zorundayız. Yani “.” ya basınca tanımladığınız propertyler’e erişemeyeceksiniz.


Resim-5

Ekrana yazdırırken, özellikle sayısal veri ile işlem yapmak istedim ki nesnemin içinde kullandığım property’lerin de dynamic tipte olduğunu göstermek istedim. “NumberOfRemains” property’sine önce int tipinde veri ataması yapıp matematiksel işlemlerle ekrana yazdırdıktan sonra, en son olarak string bir ifade atayarak tekrar ekrana yazdırdım.


Resim-6

Umarım yazdıklarım yararlı olmuştur…

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

2004 yılından beri Bilişim sektöründe profesyonel olarak çalışmaktayım. Microsoft teknolojilerini kullanarak daha çok Web ağırlıklı yazılım geliştirmekteyim.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir