ระบบรันไทม์และเครื่องเสมือน
ระบบรันไทม์และเครื่องเสมือนเป็นสภาพแวดล้อมการประมวลผลสำหรับโปรแกรม โดยทำหน้าที่แปลความหมายหรือคอมไพล์โค้ดระดับกลาง และจัดการบริการที่โปรแกรมที่กำลังทำงานต้องการ
Definition
ระบบรันไทม์คือสภาพแวดล้อมซอฟต์แวร์ที่สนับสนุนการทำงานของโปรแกรมที่นอกเหนือจากโค้ดของตัวมันเอง และเครื่องเสมือนคือกลไกการประมวลผลเชิงนามธรรมที่แปลความหมายหรือคอมไพล์ชุดคำสั่งแบบพกพา เพื่อให้เกิดความสามารถในการพกพาและบริการรันไทม์
Scope
หัวข้อนี้ครอบคลุมชั้นระหว่างโค้ดที่คอมไพล์แล้วกับฮาร์ดแวร์: ตัวแปลภาษาไบต์โค้ดและเครื่องจักรนามธรรม, การคอมไพล์แบบทันเวลา (JIT), การส่งงานแบบไดนามิกและการค้นหาเมธอด, ข้อตกลงการเรียกใช้และการจัดการสแต็ก, และบริการรันไทม์ เช่น การจัดการข้อยกเว้นและการสะท้อนกลับ (reflection) โดยจะกล่าวถึงการออกแบบเครื่องเสมือนแบบพกพาและเทคนิคที่ทำให้ภาษาที่มีการจัดการมีประสิทธิภาพ
Core questions
- เครื่องเสมือนให้ความสามารถในการพกพาข้ามฮาร์ดแวร์ได้อย่างไร?
- การคอมไพล์แบบทันเวลาผสมผสานการแปลความหมายและโค้ดเนทีฟได้อย่างไร?
- การส่งงานแบบไดนามิกและการค้นหาเมธอดมีประสิทธิภาพได้อย่างไร?
- บริการรันไทม์ใดบ้างที่ต้องสนับสนุนภาษาที่มีการจัดการ?
Key theories
- สถาปัตยกรรมเครื่องเสมือนแบบพกพา
- ข้อกำหนดของ Java Virtual Machine กำหนดไบต์โค้ดและโมเดลการประมวลผลที่พกพาได้และตรวจสอบได้ ซึ่งแสดงให้เห็นว่าเครื่องเสมือนแยกภาษาออกจากฮาร์ดแวร์เฉพาะได้อย่างไร
- การคอมไพล์แบบทันเวลา
- Aycock ได้สำรวจเทคนิคที่รันไทม์ใช้ในการคอมไพล์โค้ดให้อยู่ในรูปแบบเนทีฟระหว่างการประมวลผล โดยปรับสมดุลระหว่างการเริ่มต้นของตัวแปลภาษาที่เรียบง่ายกับปริมาณงานของโค้ดที่คอมไพล์แล้วโดยใช้ข้อมูลรันไทม์
- การแคชแบบอินไลน์สำหรับการส่งงานแบบไดนามิก
- การนำ Smalltalk ไปใช้ของ Deutsch และ Schiffman ได้นำเสนอการแคชแบบอินไลน์และการแปลแบบไดนามิก ซึ่งเป็นเทคนิคสำคัญที่ทำให้การค้นหาเมธอดในภาษาที่มีการส่งงานแบบไดนามิกเป็นไปอย่างรวดเร็ว
Clinical relevance
เครื่องเสมือนและรันไทม์ที่มีการจัดการเป็นขุมพลังของแพลตฟอร์มที่ใช้กันอย่างแพร่หลายสำหรับ Java, .NET, JavaScript และ Python ซึ่งให้ความสามารถในการพกพา ความปลอดภัย และการปรับแต่งประสิทธิภาพแบบปรับเปลี่ยนได้ การคอมไพล์แบบ JIT และการแคชแบบอินไลน์เป็นเหตุผลที่ทำให้ภาษาไดนามิกที่มีระดับสูงสามารถบรรลุประสิทธิภาพที่แข่งขันได้
History
เครื่องจักรนามธรรมมีมาตั้งแต่ระบบแบบพกพายุคแรกเริ่มและ Smalltalk ซึ่งการนำไปใช้ในปี 1984 ได้บุกเบิกการแปลแบบไดนามิกและแคชแบบอินไลน์ Java Virtual Machine ทำให้ไบต์โค้ดแบบพกพาเป็นที่นิยมในช่วงกลางทศวรรษ 1990 และคอมไพเลอร์ JIT แบบปรับเปลี่ยนได้ เช่น HotSpot และต่อมาคือเอนจิน JavaScript ได้นำการปรับแต่งประสิทธิภาพรันไทม์เชิงรุกมาสู่ภาษาที่มีการจัดการกระแสหลัก
Debates
- การแปลความหมายเทียบกับการคอมไพล์แบบทันเวลา
- นักออกแบบรันไทม์ชั่งน้ำหนักระหว่างตัวแปลภาษาที่เรียบง่ายซึ่งเริ่มต้นได้เร็วและใช้หน่วยความจำน้อย กับคอมไพเลอร์ JIT ที่ให้ประสิทธิภาพสูงสุดที่สูงกว่า แต่มีค่าใช้จ่ายด้านเวลาในการวอร์มอัพและความซับซ้อนในการนำไปใช้ ซึ่งมักจะรวมทั้งสองอย่างเข้าด้วยกันในระบบแบบแบ่งชั้น
Key figures
- Peter Deutsch
- John Aycock
- James Gosling
- Gilad Bracha
Related topics
Seminal works
- lindholm2014
- aycock2003
- deutsch1984
Frequently asked questions
- ในบริบทนี้ เครื่องเสมือนคืออะไร?
- ในที่นี้ เครื่องเสมือนคือกลไกการประมวลผลซอฟต์แวร์ที่รันชุดคำสั่งแบบพกพา (เช่น ไบต์โค้ด) โดยทำหน้าที่เป็นนามธรรมเหนือฮาร์ดแวร์พื้นฐานและให้บริการรันไทม์ แทนที่จะจำลองคอมพิวเตอร์ทั้งเครื่อง
- การคอมไพล์แบบทันเวลาช่วยเพิ่มประสิทธิภาพได้อย่างไร?
- คอมไพเลอร์ JIT จะแปลส่วนของโปรแกรมที่ถูกเรียกใช้บ่อยๆ ให้เป็นโค้ดเนทีฟในขณะรันไทม์ โดยใช้ข้อมูลการทำโปรไฟล์ที่คอมไพเลอร์แบบ ahead-of-time ไม่มี ทำให้โค้ดที่ทำงานบ่อย (hot code) ทำงานด้วยความเร็วใกล้เคียงกับเนทีฟ