Dinamik diller nesne şekilleri ve satır içi önbellekle hızlanıyor
Öne çıkanlar
- Dinamik dillerde öznitelikleri doğrudan özet tabloda aramak her erişimde yüzlerce işlemci komutuna mal oluyor.
- Nesne haritaları ve satır içi önbellek mekanizması, öznitelik aramalarını sabit zamanlı dizi indeksine dönüştürüyor.
- Özniteliklerin farklı sıralarla atanması yeni şekiller türeterek satır içi önbellek performansını düşürüyor.
Dinamik tipli programlama dilleri, nesnelerin çalışma zamanında esnek biçimde öznitelik kazanmasına olanak tanıyor. Python, Ruby ve JavaScript gibi dillerde nesneler genellikle isimlerin değerlerle eşleştiği yapılar olarak kullanılıyor. Sanal makinelerin bu yapıyı doğrudan özet tablolar (hash table) ile modellemesi durumunda, her öznitelik erişiminde yüzlerce işlemci komutu çalışıyor ve bellek bağımlı yüklemeler nedeniyle sistem performansı düşüyor. Geliştiriciler bu sorunu aşmak için nesne şekilleri (shapes) veya haritalar (maps) adı verilen veri modellerini tercih ediyor.
Nesne şekilleri yaklaşımında her nesne, bellek yerleşimini temsil eden değişmez bir harita işaretçisi taşıyor. Yeni bir öznitelik eklendiğinde nesne, ağaç yapısı izleyen yeni bir haritaya geçiş yapıyor ve değerler sıralı bir dizide saklanıyor. Satır içi önbellek (inline cache) mekanizması ise nesnenin haritasını ve erişilen özniteliğin dizinini önbelleğe alıyor. Sonraki erişimlerde harita işaretçisi değişmediyse arama işlemi doğrudan dizi indeksiyle yapılıyor. Bu yöntem karmaşık özet tablo aramalarını tek bir bellek erişimine indirgeyerek çalışma zamanı hızını artırıyor.
Farklı sınıflara ait nesneler aynı öznitelik sıralamasına sahip olduklarında aynı şekli paylaşabiliyor. Nesneye özniteliklerin farklı sıralarla eklenmesi veya koşullu tanımlamalar yapılması ise şekil çeşitliliğini artırarak önbellek ıskalamalarına yol açabiliyor. C++ ve Rust gibi dillerle yazılan modern sanal makineler, öznitelikleri doğrudan nesne başlığıyla birlikte sıralı tahsis ederek bellek kullanımını ve işaretçi takibini en aza indiriyor.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.