ความสัมพันธ์ระหว่างล่ามเมตาวงกลมเครื่องเสมือนและประสิทธิภาพที่เพิ่มขึ้นคืออะไร


12

ฉันได้อ่านเกี่ยวกับล่ามเมตาวงกลมบนเว็บ (รวมถึง 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 ที่ทันสมัยในการเพิ่มประสิทธิภาพ อาจเป็นกระดาษหรือหนังสือ?


3
เงิน เงินที่เคยถูกเทลงใน C ++ และตอนนี้ Fortran ถูกเทลงใน HotSpot, CLR, Mono, V8, Nitro, SpiderMonkey และอื่น ๆ
Jörg W Mittag

ฉันสามารถเดาได้ แต่ฉันคิดว่ามันจะดีขึ้นเมื่อเวลาผ่านไปตามที่อธิบายไว้ที่นี่joelonsoftware.com/articles/fog0000000017.html
Doc Brown

1
RE วิธี PyPy ได้เร็วกว่า CPython: มันไม่ได้เขียนในหลามก็เขียนในภาษาที่แตกต่างกันค่อนข้างที่สามารถทอทที่ดีที่สุดได้อย่างมีประสิทธิภาพ

1
@Gomi ไม่ได้เกี่ยวกับความคล้ายคลึงกันของภาษาการใช้งานกับภาษาที่นำไปใช้ มีล่าม JavaScript, Lisp, Prolog, SmallTalk และ Ruby ที่เขียนใน RPython และพวกเขาจะได้รับข้อเสนอ PyPy เดียวกัน เหตุผลเดียวที่ RPython สร้างมาจาก Python ก็คือมันถูกสร้างขึ้นโดยผู้ที่ชื่นชอบ Python คุณสมบัติของ RPython ที่ทำให้ PyPy รวดเร็วนั้นไม่มีส่วนเกี่ยวข้องกับ Python: การสร้างคอมไพเลอร์ JIT อัตโนมัติ, ตัวรวบรวมขยะและอื่น ๆ - และใช่ส่วนใหญ่สามารถทำได้โดยใช้ภาษาอื่น คุณต้องสร้างคอมไพเลอร์ใหม่ทั้งหมด

4
-1 เพราะคุณดูเหมือนจะมีอย่างน้อย 3 แตกต่างกันคำถามที่นี่: (ก) ทำไมการใช้งานเมตาวงกลมเพื่อให้ดีหรือไม่? (b) VMs มีประสิทธิภาพเนื่องจากข้อมูลประเภทและการใคร่ครวญมีประโยชน์ต่อประสิทธิภาพหรือไม่ (c) ความนิยมของ VM มาเพิ่มขึ้นในช่วงปลายทศวรรษ 2000 อย่างไรและทำไมพวกเขาถึงได้รับประสิทธิภาพที่ดีในทันที? ฉันคิดว่ามันเป็นการดีที่จะถามคำถามแยกต่างหาก
โอ๊ก

คำตอบ:


1

2 จาก 3: ไม่มีความสัมพันธ์ระหว่างการรันไทม์ภาษา "meta-circular" และ "ประสิทธิภาพสูง" Meta runtimes แบบวงกลมที่ให้ประสิทธิภาพสูงทำได้โดยการรวบรวม JIT เป็นโค้ดเนทีฟและรันโค้ดเนทีฟ ไม่มีเหตุผลใดที่ Python hi-perf ของคุณจะต้องเขียนใน Python หรือ Lisp ใน Lisp เป็นต้น แต่ถ้าคุณคิดว่าภาษาของคุณมีพลังแสดงออกและแสดงออกได้ดีกว่าภาษาอื่น ๆ ทำไมไม่ใช้มันในการเขียน รันไทม์ของตัวเอง? หรือถ้าคุณไม่คิดว่าภาษาของคุณ "ดีกว่า" กว่าภาษาอื่นทำไมคุณถึงมีปัญหาในการใช้งานเลย?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.