LLVM อยู่ในระดับต่ำในทางใด?


12

ในสิ่งที่วิธี (s) LLVM (ระดับต่ำเครื่องเสมือน)ระดับต่ำ? (ในขณะที่เขียนฉันไม่พบการขยายตัวย่อ "LLVM" นี้บนเว็บไซต์ แต่บน Wikipedia )

มันเรียกว่า "ระดับต่ำ" ในสิ่งที่มันออกแบบมาสำหรับ (โครงสร้างพื้นฐานคอมไพเลอร์) หรือเพราะมันทำงานใน "ระดับที่ต่ำกว่า" กว่าเครื่องมืออื่น ๆ ?

ในฐานะที่เป็น "ภาพประกอบ" ของสิ่งนี้ LLVM อยู่ในระดับต่ำกว่าJVMและCLRหรือมันถูกออกแบบมาสำหรับการใช้ "ระดับล่าง" เท่านั้นหรือไม่

คำตอบ:


16

LLVM อยู่ในระดับที่ต่ำกว่า VM ทั่วไปเช่น JVM และ CLR ตัวอย่างเช่นแม้ว่าจะมีhooksสำหรับตัวรวบรวมขยะ แต่ก็ไม่ได้จัดเตรียมตัวรวบรวมขยะเอง

ในทำนองเดียวกัน JVM มีคอมไพเลอร์ JIT ในตัว (ยกเว้นในรุ่นโบราณจริงๆ) LLVM มีคอมไพเลอร์ JIT บางส่วนสำหรับ LLVM IR แต่ก็ยังขึ้นอยู่กับผู้พัฒนาที่จะเชื่อมโยงสิ่งต่าง ๆ เข้าด้วยกันและจริง ๆ แล้วโค้ด JIT

เมื่อ JVM พบภายนอกที่ไม่ได้แก้ไขมันจะออกไปและค้นหาคลาสที่เหมาะสมเพื่อให้เป็นที่พึงพอใจและรู้วิธีค้นหาไฟล์. class ในระบบไฟล์และในไฟล์. jar 1โดยตรง คอมไพเลอร์ JIT ของ LLVM มีตะขอที่คุณสามารถตัดสินใจได้ว่าจะจัดการกับมันอย่างไร ตามที่คุณคาดหวังบางคนเขียนเวอร์ชันเริ่มต้นบางอย่างเพื่อให้สามารถทำสิ่งต่าง ๆ ตามลำดับเดียวกับที่ JVM ทำได้ - แต่คุณก็สามารถละเว้นสิ่งเหล่านี้และทำสิ่งต่าง ๆ ได้หากคุณเลือก

พูดง่ายๆก็คือถ้าคุณกำลังพัฒนาคอมไพเลอร์ (หรือบางอย่างตามลำดับ) มันมีเครื่องมือมากมายที่จะทำให้ชีวิตของคุณง่ายขึ้น แทนที่จะต้องกังวลเกี่ยวกับการปรับให้เหมาะสมคุณสามารถทำการแปลที่ง่ายที่สุดที่คุณสามารถจัดการจากซอร์สโค้ดของคุณเป็น LLVM IR จากนั้นใช้ไลบรารี LLVM เพื่อจัดการการปรับการตั้งค่าการเชื่อมโยงและอื่น ๆ อย่างไรก็ตามมันเป็นไลบรารี - ฟังก์ชั่นที่มีประโยชน์จริงๆบางอย่างคุณจึงไม่ต้องจัดการกับรายละเอียดทั้งหมด แต่มันยังคงใช้งานได้และคุณยังคงเขียนโค้ดเพื่อเรียกใช้งาน มันไม่ใช่ผลิตภัณฑ์สำเร็จรูปเครื่องมือที่มีประโยชน์สำหรับการสร้างผลิตภัณฑ์ที่ค่อนข้างรวดเร็วและง่ายดาย


1 ในทางเทคนิคแล้วสิ่งเหล่านี้ไม่ได้ถูกสร้างไว้ใน JVM อย่างเหมาะสม มันระบุสิ่งที่มักจะเรียกว่าโหลดเดอร์ระดับแรกเป็นส่วนหนึ่งของ JVM ที่เหมาะสมจากนั้นมีตัวโหลดคลาสผู้ใช้ที่ระบุใน java.util.ClassLoader ที่จัดการสิ่งอื่น ๆ ตัวโหลดคลาสบางตัวจะถูกรวมไว้โดยค่าเริ่มต้นและหากคุณต้องการไม่ดีพอคุณสามารถเสริมได้โดยการกำหนดของคุณเอง


12

มันอยู่ในระดับต่ำเพราะมันถูกออกแบบมาเพื่อให้เครื่องเสมือนหรือที่มีอยู่ในอนาคต (JVM) สามารถใช้เป็นแกนหลักของการใช้งานของพวกเขา

เห็นด้วยวิธีนี้: เครื่องเสมือนจริงของ Java และ Python สามารถพกพาได้อย่างมากเพราะเขียนในมาตรฐาน C และพึ่งพาไลบรารีของตัวเองเป็นจำนวนมาก จุดประสงค์ของ LLVM คือการจัดเตรียมโครงสร้างพื้นฐานเพื่อให้ง่ายต่อการย้ายพอร์ตเครื่องเสมือนใด ๆ ไปยังแพลตฟอร์มที่รองรับ LLVM แล้ว

LLVM เสนอการสนับสนุนสำหรับการรวบรวมแบบสแตติกและ JIT และได้รับการออกแบบในแบบที่สามารถทำงานในพื้นที่ระบบปฏิบัติการที่เชื่อถือได้ ซึ่งหมายความว่าในทางทฤษฎีแล้วการใช้งานเครื่องเสมือนจริงบน LLVM นั้นน่าจะหมายถึงการทำงานที่น้อยลงและสร้างบางสิ่งที่รวดเร็วและมีประสิทธิภาพมากขึ้น ในทางทฤษฎี

จากนั้น LLVM ซึ่งเป็นระดับที่ต่ำกว่าควรง่ายกว่าในการพอร์ตไปยังระบบปฏิบัติการและสถาปัตยกรรมฮาร์ดแวร์ที่แตกต่างกัน

มีการประหยัดจำนวนมากหากผู้ดำเนินการด้านภาษาสามารถเขียนไปยังแพลตฟอร์มระดับต่ำที่ง่ายต่อการพอร์ต VMs ที่รู้จักกันดีที่สุดอยู่ตรงกลางระหว่างภาษาที่พวกเขาให้บริการและระบบปฏิบัติการและพวกเขาต้องใช้การเป็นตัวแทนระดับกลางของตัวเองและ JITC


5

ส่วน "ระดับต่ำ" ของชื่อ LLVM หมายถึงระดับของชุดคำสั่งเสมือนที่ใช้ ภาษากลาง (IR) ที่ LLVM ใช้อยู่ใกล้กับระดับของรหัสเครื่องแม้ว่าจะเป็นผู้ไม่เชื่อเรื่องพระเจ้าสถาปัตยกรรมและทั่วไป

ไบต์ของ JVM และ CLR นั้นค่อนข้างสูงในระดับที่มีคำแนะนำที่อยู่ในเลเยอร์นามธรรมที่สูงกว่า ทั้งสองเป็นภาษาแอสเซมบลีที่ยึดตามวัตถุ ตัวอย่างเช่น JVM มีคำสั่ง invokevirtual ซึ่งเป็นคำสั่งที่ต้องรู้เกี่ยวกับโมเดลอ็อบเจ็กต์เฉพาะของภาษา Java


3

เป็นระดับที่ต่ำกว่า VM เฉพาะภาษาและ VM แบบรวมเช่น JVM และ CLR การออกแบบของมันอยู่ใกล้กับการเป็นตัวแทนระดับกลางในระดับต่ำใน GCC (GIMPLE) และคอมไพเลอร์ที่คล้ายกัน ไม่มีค่าเริ่มต้น GC ไม่มีระบบประเภทที่เฉพาะเจาะจงระดับสูงที่บังคับใช้ไม่มีการสันนิษฐาน (จะต้องระบุอย่างชัดเจน) จำนวนเต็มและชนิดข้อมูลจุดลอยตัวมีความชัดเจน (และขึ้นอยู่กับแพลตฟอร์ม) และระดับต่ำสุดของทั้งหมด - a arithmetics ตัวชี้ที่ดีสามารถใช้ได้

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