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.
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
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 
No Responses to “Dynamic Language Runtime (DLR) Nedir ?”
RSS feed for comments on this post. TrackBack URL

