ผู้ประกอบกับล่าม
โดยทั่วไป คอมไพเลอร์คือโปรแกรมคอมพิวเตอร์ที่อ่านโปรแกรมที่เขียนด้วยภาษาหนึ่งซึ่งเรียกว่าภาษาต้นทางและแปลเป็นภาษาอื่นซึ่งเรียกว่าภาษาเป้าหมาย ตามเนื้อผ้า ภาษาต้นฉบับเป็นภาษาระดับสูง เช่น C++ และภาษาเป้าหมายเป็นภาษาระดับต่ำ เช่น ภาษาแอสเซมบลี อย่างไรก็ตาม มีคอมไพเลอร์ที่สามารถแปลงโปรแกรมต้นทางที่เขียนด้วยภาษาแอสเซมบลีและแปลงเป็นรหัสเครื่องหรือรหัสวัตถุได้ แอสเซมเบลอร์เป็นเครื่องมือดังกล่าว ในทางกลับกัน ล่ามเป็นเครื่องมือที่รันคำสั่งที่เขียนในภาษาการเขียนโปรแกรมบางภาษาล่ามสามารถรันซอร์สโค้ดระดับสูงได้โดยตรงหรือแปลเป็นโค้ดระดับกลาง จากนั้นตีความหรือรันโค้ดที่คอมไพล์แล้ว
แอสเซมเบลอร์คืออะไร
Assembler คือซอฟต์แวร์หรือเครื่องมือที่แปลภาษาแอสเซมบลีเป็นรหัสเครื่อง ดังนั้นแอสเซมเบลอร์จึงเป็นคอมไพเลอร์ชนิดหนึ่งและซอร์สโค้ดเขียนด้วยภาษาแอสเซมบลี แอสเซมบลีเป็นภาษาที่มนุษย์อ่านได้ แต่โดยทั่วไปแล้วจะมีความสัมพันธ์แบบหนึ่งต่อหนึ่งกับรหัสเครื่องที่เกี่ยวข้อง ดังนั้น แอสเซมเบลอร์จึงถูกกล่าวว่าทำการแปลแบบ isomorphic (การทำแผนที่แบบหนึ่งต่อหนึ่ง) แอสเซมเบลอร์ขั้นสูงมีคุณสมบัติเพิ่มเติมที่สนับสนุนการพัฒนาโปรแกรมและกระบวนการดีบัก ตัวอย่างเช่น ประเภทของแอสเซมเบลอร์ที่เรียกว่าแมโครแอสเซมเบลอร์จัดเตรียมมาโครอำนวยความสะดวก
ล่ามคืออะไร
ล่ามคือโปรแกรมคอมพิวเตอร์หรือเครื่องมือที่ดำเนินการคำสั่งการเขียนโปรแกรม ล่ามอาจรันซอร์สโค้ดโดยตรงหรือแปลงซอร์สโค้ดเป็นโค้ดระดับกลางและรันโค้ดโดยตรง หรือรันโค้ดที่คอมไพล์ล่วงหน้าที่สร้างโดยคอมไพเลอร์ (ระบบล่ามบางระบบมีคอมไพเลอร์สำหรับงานนี้)ภาษาต่างๆ เช่น Perl, Python, MATLAB และ Ruby เป็นตัวอย่างของภาษาการเขียนโปรแกรมที่ใช้โค้ดระดับกลาง UCSD Pascal ตีความโค้ดที่คอมไพล์แล้ว ภาษาอย่าง Java, BASIC และ Samlltalk จะคอมไพล์ซอร์สเป็นโค้ดระดับกลางที่เรียกว่า bytecode ก่อน แล้วจึงตีความมัน
แอสเซมเบลอร์กับล่ามต่างกันอย่างไร
แอสเซมเบลอร์ถือเป็นคอมไพเลอร์ชนิดพิเศษ ซึ่งแปลเฉพาะภาษาแอสเซมบลีเป็นรหัสเครื่อง ล่ามเป็นเครื่องมือที่ดำเนินการคำสั่งที่เขียนในบางภาษา ระบบล่ามอาจรวมถึงคอมไพเลอร์เพื่อคอมไพล์โค้ดล่วงหน้าก่อนการแปล แต่ล่ามไม่สามารถเรียกว่าคอมไพเลอร์ชนิดพิเศษได้ แอสเซมเบลอร์สร้างอ็อบเจ็กต์โค้ด ซึ่งอาจต้องเชื่อมโยงโดยใช้โปรแกรมลิงเกอร์เพื่อที่จะทำงานบนเครื่อง แต่ล่ามส่วนใหญ่สามารถดำเนินการโปรแกรมให้เสร็จสิ้นได้ด้วยตนเอง โดยทั่วไปแอสเซมเบลอร์จะทำการแปลแบบตัวต่อตัว แต่สิ่งนี้ไม่เป็นความจริงสำหรับล่ามส่วนใหญ่เนื่องจากภาษาแอสเซมบลีมีการแมปแบบตัวต่อตัวกับรหัสเครื่อง แอสเซมเบลอร์อาจใช้เพื่อสร้างโค้ดที่ทำงานอย่างมีประสิทธิภาพมากในโอกาสที่ประสิทธิภาพมีความสำคัญมาก (สำหรับเอ็นจิ้นกราฟิก ระบบฝังตัวที่มีทรัพยากรฮาร์ดแวร์จำกัดเมื่อเทียบกับคอมพิวเตอร์ส่วนบุคคล เช่น ไมโครเวฟ เครื่องซักผ้า เป็นต้น) ในทางกลับกัน ล่ามจะใช้เมื่อคุณต้องการพกพาได้สูง ตัวอย่างเช่น Java bytecode เดียวกันสามารถรันบนแพลตฟอร์มที่แตกต่างกันได้โดยใช้ล่ามที่เหมาะสม (JVM)