Ara Dil (Intermediate Language) - Kendi Dilini Tasarla
Blog Logo
on
read
Ara dil, makine komut seti gibi yorumlayıcınıza özel komut seti tanımlanmasıdır. Assembly gösterimi gibi IL kodları IR (Intermediate Representation) ile gösterilir. Ara dil tasarımının AST (Abstract Syntax Tree) yapısına göre avantajlarını aşağıdaki şekilde sıralayabiliriz;
Bellekte tutulan veri boyutu daha az olur. Her bir yapıyı belirtmek için kurulan her bir nesne veya struct için yığın(heap) üzerinde alan tahsis edilmesi yerine tek bir bayt dizisi olarak tahsis edildiği için hafızada daha az yer kaplar ve hafıza içerisine dağılmaz.
Taşınabilir kod. AST kodu sonradan tekrar okuyabilmek için Object Serialization işlemi yapmanız gerekecektir ki hem D dilinde henüz bununla ilgili yeterli bir kütüphane yok hemde oluşturulan dosya boyutu oldukça büyük oluyor ve hafızaya yüklenme süreleri daha uzun oluyor.
Daha hızlı bir Çalışma Zamanı (Runtime). Her bir yapı için bir Çalıştır (Run) fonksiyonu tanımlamak ve o fonksiyonlara giriş, çıkış ve yeni bir stack oluşumu, parametrelerin stack üzerinden taşınması işlemleri vakit alacaktır. IL kodunda birebir işlemciyi taklit etme imkanımız olduğu için çok daha performanslıdır.
Bazı sistemlerde parserdan AST çıktı verilip daha sonra bu çıktı IL koduna da dönüştürülebilir fakat AST yerine doğrudan IL koduna çevirilmesi performans açısından daha sağlıklı olacaktır.
Sanal Makinemizde kullanmak üzere operandlarımızı tanımlıyoruz. Burada olası bir hata durumunda yanlış komut(instruction) çalışmaması makinenin sonlanması için hlt(halt) komutunu 0x00 olacak şekilde ilk komut olarak tanımladık.
Kodlarımızı bir ubyte dizisi içerisinde saklayacağız ve nesnesinin silinmesi gibi olası bir hafıza (memory) sorununda sorunu önlemek için nesne adreslerimizi saklıyoruz. version kodundaki yorum satırı karakterlerini silerek bu özelliği aktif edebilirsiniz.
Ve aynı şekilde diğer yükleme fonksiyonlarımızı tanımlıyoruz.
Son olarak da debugging işlemimiz için yani çıkan hatalara karşı operand code ları görüntüleyebilmek için toString fonksiyonunu tanımlayacağız.
String’leri C biçiminde (C style) sakladığımız için cstr2dstr adında bir fonksiyon tanımlıyoruz.
Artık IL modülümüz hazır. Sanal makine (virtual machine) ile birlikte IL kodlarımız çalışabilir hale gelecek ve çok basit bir programlama diline sahip olacağız.