İlkay İlknur

just a developer...

Dynamic Language Runtime (DLR) Nedir ?

Merhaba,

.NET Framework 4.0'ın çıkmasıyla birlikte hayatımıza girecek en büyük yeniliklerden biri de dinamik programlama. Zaten C# programlama dilinin gelecek olan 4.0 versiyonunun teması da "Dinamik Programlama" olarak belirlenmiş durumda. Günümüzde baktığımızda dinamik programlama paradigması oldukça popüler durumda. Peki bu kadar popüler olmasının nedenleri neler öncelilkle bunlara bir gözatalım.
  • Herhangi bir tip seçiminin yapılmaması,
  • Derleme yapılmaması, yorumlama ile kodların çalıştırılması,
  • Tüm işlemlerin (tip atamalarının, tip bağlamalarının) çalışma zamanında yapılması,
  • Geliştiriminin kolay olması olarak söyleyebiliriz.
Ayrıca IronPython, IronRuby gibi dinamik programlama dilleri ile .NET altyapısını da kullanarak uygulamalarımızı daha hızlı ve etkin bir şekilde geliştirebilmekteyiz. .NET Framework 4.0 ile beraber ise artık bizler de dinamik işlemler yapabiliyor ve dinamik programlama dilleri ile konuşabiliyor olacağız. Bu yazımızda ise bizlere bu dinamik altyapıyı sunacak olan Dynamic Language Runtime (DLR) yapısını inceliyor olacağız.

Dynamic Language Runtime (DLR) Nedir ?

Dynamic Language Runtime temel olarak  IronPython,IronRuby gibi dinamik programlama dillerinin Common Language Runtime (CLR) ile iletişim kurmasını sağlayan aynı zamanda da C# ve VB gibi statik programlama dillerine de dinamik özellikler, yetenekler kazandıran bir altyapı sağlamaktadır. Dynamic Language Runtime içerisine baktığımızda ise karşımıza 4 temel yapıtaşı çıkmaktadır. Bunlar:
  • Expression Trees
  • Dynamic Dispatch
  • Call Site Caching
  • Binders
Bu yapıların hepsini teker teker incelersek,

Expression Trees 

Expression Trees yapısı aslında LINQ ile beraber .NET Framework içerisine eklenen bir yapıdır. Temel olarak yazılan kodların doğrudan direkt olarak MSIL'e çevrilmeden bir ağaç yapısında tutulmasını sağlamaktadır. Daha sonra bu ağaçlarda bulunan kodlar çalışma zamanında derlenerek yazılan kodların dinamik olarak çalıştırılması gerçekleşmektedir. Bu nedenle bu mekanizma DLR içerisinde de yoğun olarak kullanılmaktadır.

Dynamic Dispatch

Dynamic Dispatch yapısı ile çalışma zamanında dinamik metot çağırımlarına imkan sağlanmaktadır. Örneğin derleme zamanında hangi metodun çağırılacağının belli olmadığı durumlarda dynamic dispatch kullanılarak hangi metodun çağırılacağına karar verilmektedir.

Call Site Caching

DLR içerisinde bulunan en önemli yapılardan biri de Call Site Caching mekanizmasıdır. DLR'ın bu kadar etkin ve Reflection'a göre bu kadar hızlı çalışmasının en önemli nedeni olduğunu rahatlıkla söyleyebiliriz. Call Site Caching ile çalışma zamanı sırasında yapılan dinamik çağrımlar Call Site Cache içerisinde saklanmaktadır. Böylece uygulamanın çalışma evresi içerisinde yapılacak olan diğer çağrımlardan önce eğer cache içerisinde tutulmuş bilgi varsa doğrudan bu bilgi kullanılarak kod daha hızlı olarak çalıştırılmaktadır. Oysaki daha önce kullandığımız reflection mekanizmalarında bizim yazdığımız tüm reflection işlemleri kodun her çağrımında defalarca yapılmaktadır.

Binders

DLR içerisinde DLR'ın iletişim kurabildiği platformlar ile ilgili tüm bilgilere sahip olan Binder yapıları bulunmakta. Binder yapısı üst taraftaki yazılan kodun alt tarafta bulunan platformlarda nasıl çalıştırılacağı (bind edileceği) ile ilgili tüm bilgileri taşımaktadır ve gerektiğinde de ilgili işlemleri gerçekleştirmektedir. Yazılan dinamik bir kodun çalışmasını kısaca özetlersek: Dinamik bir çağrım yapılmadan önce bu çağırımla ilgili daha önce yapılıp yapılmadığıyla ilgili bilgi edinmek için Call Site Cache'e bakılır. Eğer bilgi bulunursa direkt olarak buradan kod çalıştırılır. Ancak herhangi bir bilgi bulunamazsa altyapıdaki ilgili binder kullanılarak kod çalıştırılır ve gerekli bilgiler ileride kullanılmak amacıyla Call Site Cache'e eklenir. Dynamic Language Runtime ile ilgili değinmemiz gereken önemli noktalardan biri de DLR'ın doğrudan ve sadece Microsoft tarafından geliştirilmediği. Aslında DLR Microsoft ve topluluklar ile beraber geliştirilmekte olan bir topluluk projesi. DLR'ın bir kısmının doğrudan .NET Framework içerisine gömülü olmasına rağmen özellikle ileriki yazılarımda bahsedeceğim Script Hosting ile ilgili kütüphaneler IronPython, IronRuby dillerini geliştiren topluluklar tarafından geliştirilmektedir. DLR'ın alt kısmında ise oldukça heyecan verici mekanizmalar bulunmakta. Özellikle Silverlight tarafında bulunan JavascriptBinder ile yazacağınız Javascript kodlarını artık doğrudan C# içerisinden yazabiliyorsunuz.  JavascriptBinder'ın kullanımından da ilerleyen günlerde bahsediyor olacağım. İyi geceler Smile


Yorum Gönder