คำจำกัดความที่คุณยกมาข้างต้นนั้นกว้างเกินไปสำหรับผู้เริ่มต้นที่จะเข้าใจได้อย่างสมบูรณ์ดังนั้นขอฉันเพียงแค่ย่อให้เป็นสิ่งที่เราเห็นในทางปฏิบัติ
คอมไพเลอร์:เป็นคำที่ใช้อธิบายโปรแกรมที่ใช้ซอร์สโค้ดที่เขียนด้วยภาษาเดียวและสร้างไฟล์เอาต์พุต (หรือหลายไฟล์) ในภาษาอื่น ในทางปฏิบัติส่วนใหญ่เราใช้คำนี้เพื่ออธิบายคอมไพเลอร์เช่น gcc ซึ่งใช้รหัส C เป็นอินพุตและสร้างไบนารีที่เรียกใช้งานได้ (รหัสเครื่อง) เป็นเอาต์พุต
Transpilersเรียกอีกอย่างว่าคอมไพเลอร์ต้นทางไปยังต้นทาง ดังนั้นโดยพื้นฐานแล้วพวกเขาเป็นส่วนย่อยของคอมไพเลอร์ที่ใช้ไฟล์ซอร์สโค้ดและแปลงเป็นไฟล์ซอร์สโค้ดอื่นในภาษาอื่นหรือเวอร์ชันอื่นของภาษาเดียวกัน โดยทั่วไปมนุษย์เข้าใจได้ ผลลัพธ์นี้ยังคงต้องผ่านคอมไพเลอร์หรือล่ามเพื่อให้สามารถรันบนเครื่องได้
ตัวอย่างบางส่วนของทรานสไพเลอร์:
- Emscripten : แปลงไฟล์ C / C ++ เป็น JavaScript
- Babel : Transpiles ES6 + code เป็น ES5 (ES6 และ ES5 เป็นภาษา JavaScript หรือรุ่นต่างๆ)
"ระดับนามธรรมที่ใกล้เคียงกัน" หมายความว่าอย่างไร: อย่างที่บอกว่าคอมไพล์ / ทรานสไพร์ไปยังไฟล์ซอร์สมีใครโต้แย้งได้ว่าภาษาแอสเซมบลีเป็นไฟล์ต้นฉบับด้วยดังนั้น gcc จึงเป็นทรานสไพเลอร์ด้วย ดังนั้นอาร์กิวเมนต์นี้คือโมฆะนามธรรมในระดับที่ใกล้เคียงกันนี้
แนวคิดในการจัดหมวดหมู่ภาษาเป็นระดับล่างระดับกลางและระดับสูงขึ้นอยู่กับระดับของสิ่งที่เป็นนามธรรมจากการทำงานจริงของเครื่อง / สถาปัตยกรรม
ภาษาระดับล่างเช่นแอสเซมบลีนั้นใกล้เคียงกับสถาปัตยกรรมโปรเซสเซอร์เช่นมีคำสั่งที่แตกต่างกันสำหรับโปรเซสเซอร์ที่แตกต่างกัน ในขณะที่ C / C ++ / Java / JavaScript นามธรรมทั้งหมดนี้ให้นามธรรมมากขึ้น
ดังนั้นทรานสไพเลอร์จะคอมไพล์เป็นภาษาที่ใกล้เคียงกับภาษาที่คุณเริ่มต้นในแง่ของนามธรรมนี้ (หรือใกล้เคียงกับระดับของภาษานั้นในบันไดภาษาระดับล่าง - กลาง - สูงกว่า)
หวังว่านี่จะช่วยได้!