ฉันได้อ่านเกี่ยวกับล่ามเมตาวงกลมบนเว็บ (รวมถึง SICP) และฉันได้ตรวจสอบโค้ดของการใช้งานบางอย่าง (เช่น PyPy และ Narcissus)
ฉันได้อ่านเกี่ยวกับสองภาษาค่อนข้างมากซึ่งใช้ประโยชน์จากการประเมิน metacircular, Lisp และ Smalltalk เท่าที่ฉันเข้าใจ Lisp เป็นคอมไพเลอร์โฮสติ้งด้วยตนเองเป็นครั้งแรกและ Smalltalk มีการใช้งาน JIT "จริง" เป็นครั้งแรก
สิ่งหนึ่งที่ฉันไม่เข้าใจอย่างสมบูรณ์คือล่าม / คอมไพเลอร์เหล่านั้นจะบรรลุผลการปฏิบัติงานที่ดีได้อย่างไรหรือกล่าวอีกนัยหนึ่งทำไม PyPy จึงเร็วกว่า CPython มันเป็นเพราะการสะท้อน?
และจากการวิจัย Smalltalk ของฉันทำให้ฉันเชื่อว่ามีความสัมพันธ์ระหว่าง JIT เครื่องเสมือนและการไตร่ตรอง เครื่องเสมือนเช่น JVM และ CLR อนุญาตการวิพากษ์วิจารณ์ประเภทจำนวนมากและฉันเชื่อว่าพวกเขาใช้งานได้อย่างยอดเยี่ยมในการรวบรวม Just-in-Time (และ AOT ฉันคิดว่า?) แต่เท่าที่ฉันรู้ Virtual Machines นั้นเป็นซีพียูที่พวกเขามีชุดคำสั่งพื้นฐาน Virtual Machines นั้นมีประสิทธิภาพหรือไม่เนื่องจากประกอบด้วยข้อมูลประเภทและข้อมูลอ้างอิง
ฉันถามสิ่งนี้เพราะหลายภาษาที่แปลและเรียบเรียงได้ใช้ bytecode เป็นเป้าหมาย (LLVM, Parrot, YARV, CPython) และ VM แบบดั้งเดิมเช่น JVM และ CLR ได้รับประสิทธิภาพที่เพิ่มขึ้นอย่างไม่น่าเชื่อ ฉันได้รับการบอกแล้วว่ามันเกี่ยวกับ JIT แต่เท่าที่ฉันรู้ว่า JIT นั้นไม่มีอะไรใหม่ตั้งแต่ Smalltalk และ Self ของ Sun ได้ทำมันต่อหน้า Java ฉันจำไม่ได้ว่า VMs ทำงานได้ดีเป็นพิเศษในอดีตมีคนที่ไม่ใช่นักวิชาการนอก JVM และ. NET จำนวนมากและประสิทธิภาพของพวกเขาก็ไม่ดีเท่าที่ควรตอนนี้ (ฉันหวังว่าฉันจะสามารถอ้างสิทธิ์นี้ได้ แต่ฉัน พูดจากประสบการณ์ส่วนตัว)
ทันใดนั้นในช่วงปลายยุค 2000 มีการเปลี่ยนแปลงบางอย่างและ VM จำนวนมากก็เริ่มปรากฏขึ้นสำหรับภาษาที่สร้างขึ้นและมีประสิทธิภาพที่ดีมาก มีบางสิ่งที่ค้นพบเกี่ยวกับการใช้ JIT ที่ยอมให้ VM ที่ทันสมัยในการเพิ่มประสิทธิภาพ อาจเป็นกระดาษหรือหนังสือ?