Web'deki meta-dairesel tercümanları (SICP dahil) okudum ve bazı uygulamaların (PyPy ve Narcissus gibi) kodlarını inceledim.
Metakirküler değerlendirmeyi, Lisp ve Smalltalk'ı büyük ölçüde kullanan iki dil hakkında biraz okudum. Anladığım kadarıyla Lisp ilk kendi kendini barındıran derleyici ve Smalltalk ilk "gerçek" JIT uygulamasına sahipti.
Tam olarak anlamadığım bir şey, bu çevirmenlerin / derleyicilerin nasıl bu kadar iyi bir performans elde edebildikleri veya diğer bir deyişle PyPy neden CPython'dan daha hızlı? Yansıması yüzünden mi?
Ayrıca, Smalltalk araştırmam beni JIT, sanal makineler ve yansıma arasında bir ilişki olduğuna inandırdı. JVM ve CLR gibi Sanal Makineler çok fazla tür içgözlemine izin veriyor ve Just-in-Time (ve AOT, sanırım?) Derlemesinde büyük fayda sağladıklarına inanıyorum. Ama bildiğim kadarıyla, Sanal Makineler temel bir komut setine sahip oldukları için biraz CPU gibi. Sanal Makineler dile agnostik yansımayı sağlayacak tip ve referans bilgilerini içerdikleri için verimli midir?
Bunu soruyorum çünkü hem yorumlanmış hem de derlenmiş diller artık bayt kodunu bir hedef olarak (LLVM, Parrot, YARV, CPython) kullanıyor ve JVM ve CLR gibi geleneksel VM'ler performansta inanılmaz artışlar elde etti. Bana JIT ile ilgili olduğu söylendi, ama bildiğim kadarıyla JIT yeni bir şey değil çünkü Smalltalk ve Sun'ın Öz Benliği Java'dan önce yapıyor. Geçmişte özellikle iyi performans gösteren VM'leri hatırlamıyorum, JVM ve .NET dışında akademik olmayan pek çok şey yoktu ve performansları şu anki kadar iyi değildi (keşke bu iddiayı kaynaklayabilseydim ama ben kişisel deneyimlerden konuşun).
Sonra aniden, 2000'lerin sonunda bir şeyler değişti ve çok sayıda VM, yerleşik diller için bile ve çok iyi bir performansla ortaya çıkmaya başladı. Hemen hemen her modern VM'nin performansta hızla yükselmesine izin veren JIT uygulaması hakkında bir şey keşfedildi mi? Belki bir kağıt ya da bir kitap?