ฉันคอยฟัง LLVM อยู่ตลอดเวลา มันเป็น Perl แล้วก็อยู่ใน Haskell แล้วมีคนใช้มันในภาษาอื่นบ้างไหม? มันคืออะไร?
ฉันคอยฟัง LLVM อยู่ตลอดเวลา มันเป็น Perl แล้วก็อยู่ใน Haskell แล้วมีคนใช้มันในภาษาอื่นบ้างไหม? มันคืออะไร?
คำตอบ:
LLVM เป็นห้องสมุดที่ใช้ในการสร้างปรับให้เหมาะสมและสร้างรหัสเครื่องระดับกลางและ / หรือไบนารี
LLVM สามารถใช้เป็นเฟรมเวิร์กคอมไพเลอร์ซึ่งคุณจัดเตรียม "front end" (parser และ lexer) และ "back end" (รหัสที่แปลงการแสดงของ LLVM เป็นรหัสเครื่องจริง)
LLVM ยังสามารถทำหน้าที่เป็นคอมไพเลอร์ JIT - มันรองรับ x86 / x86_64 และแอสเซมบลีการสร้าง PPC / PPC64 ด้วยการเพิ่มประสิทธิภาพรหัสที่รวดเร็วสำหรับการรวบรวมความเร็ว
หากคุณสนใจคุณสามารถเล่นกับรหัสเครื่องของ LLVM ที่สร้างขึ้นจากรหัส C หรือ C ++ ในหน้าตัวอย่างของพวกเขาแต่หน้าสาธิตจะปิดใช้งานตั้งแต่ปี 2013
บทสรุปที่ดีของ LLVM คือ:
ที่ส่วนหน้าคุณมี Perl และภาษาระดับสูงอื่น ๆ อีกมากมาย ที่ส่วนหลังคุณมีรหัสดั้งเดิมที่เรียกใช้บนเครื่องโดยตรง
ที่ศูนย์คือการแสดงรหัสกลางของคุณ หากทุกภาษาระดับสูงสามารถแสดงในรูปแบบ LLVM IR นี้ได้เครื่องมือการวิเคราะห์ที่ใช้ IR นี้สามารถนำกลับมาใช้ใหม่ได้อย่างง่ายดายซึ่งเป็นเหตุผลพื้นฐาน
LLVM (ใช้เพื่อหมายถึง "เครื่องเสมือนระดับต่ำ" แต่ไม่ใช่อีกต่อไป) เป็นโครงสร้างพื้นฐานคอมไพเลอร์ซึ่งเขียนใน C ++ ซึ่งออกแบบมาสำหรับการรวบรวมเวลาลิงก์เวลารันไทม์และการเพิ่มประสิทธิภาพ "เวลาว่าง" ของโปรแกรมที่เขียน ในภาษาการเขียนโปรแกรมโดยพลการ เริ่มแรกใช้สำหรับ C / C ++ การออกแบบที่ไม่ขึ้นกับภาษา (และความสำเร็จ) ของ LLVM ได้เริ่มต้นตั้งแต่ปลายด้านหน้าที่หลากหลายรวมถึง Objective C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL , และคนอื่น ๆ.
ตามหนังสือ'เริ่มต้นใช้งาน LLVM Core Libraries' (c):
อันที่จริงชื่อ LLVM อาจอ้างถึงสิ่งต่อไปนี้:
โครงการ / โครงสร้างพื้นฐาน LLVM:นี่คือร่มสำหรับหลายโครงการที่รวมกันเป็นคอมไพเลอร์ที่สมบูรณ์: frontends, backends, optimizers, assembler, linkers, libc ++, compiler-rt, และ JIT engine คำว่า "LLVM" มีความหมายเช่นในประโยคต่อไปนี้: "LLVM ประกอบด้วยหลายโครงการ"
คอมไพเลอร์ที่ใช้ LLVM:นี่คือคอมไพเลอร์ที่สร้างขึ้นบางส่วนหรือทั้งหมดด้วยโครงสร้างพื้นฐาน LLVM ตัวอย่างเช่นคอมไพเลอร์อาจใช้ LLVM สำหรับส่วนหน้าและส่วนหลัง แต่ใช้ไลบรารีระบบ GCC และ GNU เพื่อดำเนินการลิงก์สุดท้าย LLVM มีความหมายนี้ในประโยคต่อไปนี้: "ฉันใช้ LLVM เพื่อรวบรวมโปรแกรม C กับแพลตฟอร์ม MIPS"
ไลบรารี LLVM:นี่คือส่วนรหัสที่ใช้ซ้ำได้ของโครงสร้างพื้นฐาน LLVM ตัวอย่างเช่น LLVM มีความหมายนี้ในประโยค: "โครงการของฉันใช้ LLVM เพื่อสร้างรหัสผ่านกรอบการรวบรวม Just-in-Time"
LLVM core:การเพิ่มประสิทธิภาพที่เกิดขึ้นในระดับภาษากลางและอัลกอริทึมแบ็กเอนด์ในรูปแบบ LLVM core ที่เริ่มโครงการ LLVM มีความหมายนี้ในประโยคต่อไปนี้: "LLVM และ Clang เป็นสองโครงการที่แตกต่างกัน"
LLVM IR:นี่คือการนำเสนอ LLVM ของคอมไพเลอร์ระดับกลาง LLVM มีความหมายนี้เมื่อใช้ในประโยคเช่น "ฉันสร้างส่วนหน้าซึ่งแปลภาษาของตัวเองเป็น LLVM"
LLVM นั้นเป็นห้องสมุดที่ใช้สร้างคอมไพเลอร์และ / หรือซอฟต์แวร์ที่เน้นภาษา ส่วนสำคัญพื้นฐานคือแม้ว่าคุณจะมี gcc ซึ่งอาจเป็นชุดคอมไพเลอร์ที่พบได้บ่อยที่สุด แต่ก็ไม่ได้สร้างขึ้นเพื่อให้สามารถใช้งานได้อีกครั้ง เป็นการยากที่จะนำส่วนประกอบจาก gcc มาใช้เพื่อสร้างแอปพลิเคชันของคุณเอง LLVM แก้ปัญหานี้ได้ดีโดยการสร้างชุดของ "โมดุลและคอมไพเลอร์และเทคโนโลยีเครื่องมือเครือข่าย" ซึ่งทุกคนสามารถใช้เพื่อสร้างคอมไพเลอร์และซอฟต์แวร์เชิงภาษา
โครงสร้างพื้นฐาน LLVM คอมไพเลอร์มีประโยชน์อย่างยิ่งสำหรับการดำเนินการปรับให้เหมาะสมและการแปลงรหัส นอกจากนี้ยังประกอบด้วยเครื่องมือจำนวนหนึ่งที่ให้บริการประเพณีที่แตกต่างกัน llvm-prof เป็นเครื่องมือการทำโปรไฟล์ที่อนุญาตให้คุณทำการทำโปรไฟล์การดำเนินการเพื่อระบุฮอตสปอตของโปรแกรม การเลือกใช้เป็นเครื่องมือเพิ่มประสิทธิภาพที่ให้การเพิ่มประสิทธิภาพที่หลากหลาย (เช่นการกำจัดโค้ดที่ไม่ทำงาน)
ที่สำคัญ LLVM ให้ห้องสมุดแก่คุณเพื่อเขียน Passes ของคุณเอง ตัวอย่างเช่นหากคุณต้องการเพิ่มการตรวจสอบช่วงในอาร์กิวเมนต์บางอย่างที่ส่งผ่านไปยังฟังก์ชั่นบางอย่างของโปรแกรมการเขียน LLVM Pass แบบธรรมดาก็เพียงพอแล้ว
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเขียน Pass ของคุณเองโปรดตรวจสอบhttp://llvm.org/docs/WritingAnLLVMPass.htmlนี้