ฉันจะบอกได้อย่างไรว่าภาษาโปรแกรมคอมไพล์เป็นภาษาอื่น?


22

ฉันจะพูดเป็นภาษาอังกฤษได้อย่างไรว่าภาษาโปรแกรมนั้นสามารถคอมไพล์เป็นภาษาโปรแกรมอื่นได้?

ตัวอย่างสามารถHaxe บนเว็บไซต์ภาษาถูก decribed เป็น "Multiplatform":

หลายแพลตฟอร์ม: Haxe สามารถรวบรวมไปยังแพลตฟอร์มการเขียนโปรแกรมยอดนิยมทั้งหมดได้ด้วยการรวบรวมอย่างรวดเร็ว - JavaScript, Flash, NekoVM, PHP, C ++, C # และ Java (เร็ว ๆ นี้)

แต่หลายแพลตฟอร์มสามารถเข้าใจผิดเป็นฮาร์ดแวร์หรือแพลตฟอร์มซอฟต์แวร์ (win, mac, linux)

ดังนั้นคำที่เหมาะสมที่สุดที่อธิบายความสามารถนี้คืออะไร?


3
ฉันจะลบ "คอมไพล์" และเพียงบอกว่าภาษาการเขียนโปรแกรมนี้สามารถเปลี่ยนเป็นภาษาอื่นได้โดยการใช้ล่าม
Neil

6
คุณสามารถใช้คำเดียวกับภาษาปกติ: แปลแปล มันชัดเจนและฉันได้ยินคำที่ใช้ในแง่นี้
superM

4
@teresko เป็นไงบ้าง? วิธีเดียวที่ฉันจะเห็นคุณโต้แย้งว่าคุณใช้คำจำกัดความที่มากเกินไปและไม่มีประโยชน์ของการรวบรวม (ซึ่ง จำกัด การส่งออกไปยังรหัสเครื่อง)

18
@Neil: การเปลี่ยนโปรแกรมที่เขียนด้วยภาษาหนึ่งเป็นภาษาอื่นไม่ใช่การตีความ ในความเป็นจริงนี้เป็นความหมายของการสะสม
Jörg W Mittag

2
@ Neil การคอมไพล์โดยคำจำกัดความคือการแปลงจากภาษาหนึ่งเป็นอีกภาษาหนึ่ง และ "การแปลง" ฟังดูคลุมเครือและมีความหมายเหมือนกันว่าเป็น "การรวบรวม" ตราบใดที่ผู้อ่านของคุณไม่มีความเชี่ยวชาญในการเขียนใหม่ ดังนั้นฉันขอแนะนำให้ใช้คำว่า "การกำหนดเป้าหมาย" เช่น "Haxe กำลังกำหนดเป้าหมาย JavaScript, Flash, อะไรก็ตามและอื่น ๆ "
SK-logic

คำตอบ:


41

คำปกติคือ "transcompilation" - ไม่ใช่คำทั่วไป แต่เป็นคำที่ถูกต้องทางเทคนิค มันไม่ได้มีไว้สำหรับภาษาสคริปต์ใหม่ที่ทันสมัย ​​(CoffeeScript -> JavaScript) เช่นกัน คอมไพเลอร์ C ++ ตัวแรกอยู่ในความจริงแล้วคอมไพเลอร์เป็นซี


2
นอกจากนี้ "transpiles" เช่นเดียวกับใน "The

4
ฉันไม่เคยได้ยินคำนี้มาก่อนและอยู่ในสนามมานานหลายสิบปี ใจชี้ไปที่ต้นกำเนิดของมัน (ลิงค์ไปยังกระดาษแผ่นแรกที่มันปรากฏจะดีที่สุด)?
SK-logic

จากวิกิพีเดีย : "คอมไพเลอร์จากแหล่งหนึ่งสู่แหล่งที่มา [aka." transcompiler "," transpiler "] แปลระหว่างภาษาโปรแกรมที่ทำงานที่ระดับประมาณนามธรรมเดียวกันในขณะที่คอมไพเลอร์แบบดั้งเดิมแปลจากภาษาโปรแกรมระดับสูงถึงต่ำ ภาษาการเขียนโปรแกรมระดับ "
l0b0

4
@ l0b0 วิกิพีเดียไม่ได้แสดงความคิดเห็นเกี่ยวกับต้นกำเนิดของคำและแน่นอนไม่ควรจะเป็นแหล่งต้นฉบับ
SK-logic

3
... การค้นหา "transcompilation" บน Google ไม่ได้ให้ผลลัพธ์ที่เกี่ยวข้อง ...
Bakuriu

27

สุภาพบุรุษขออภัย แต่คำนี้เป็นเพียง"รวบรวม" มันหมายถึงการเปลี่ยนรหัสประเภทหนึ่งเป็นรหัสประเภทอื่น มันไม่ได้ทำให้ความแตกต่างที่แท้จริงถ้ารหัสนั้นเป็นรหัสภาษาอังกฤษ, C ++, x86, รหัสเครื่อง ARM, Java, bytecodeหรือกลับสู่ภาษาอังกฤษ โดยทั่วไปเราใช้เพื่อหมายถึงการเดินทางจากภาษาโปรแกรมไปยังรหัสเครื่อง แต่นั่นเป็นแง่มุมที่คำได้รับเมื่อเวลาผ่านไป และเฮ้ถ้ามีคนเริ่มใช้คำที่ไม่ถูกต้องมันจะได้รับความหมายใหม่อย่างแน่นอน แต่ถ้าคุณต้องการคำสำหรับการเปิด Haxe เป็น C ++ คำว่า"คอมไพล์"

หลายแพลตฟอร์ม: Haxe สามารถรวบรวมเป็นภาษาการเขียนโปรแกรมยอดนิยมทั้งหมดด้วยการรวบรวมอย่างรวดเร็ว - JavaScript, Flash, NekoVM, PHP, C ++, C # และ Java (เร็ว ๆ นี้)

(นอกจากนี้ฉันไม่สนใจ Merriam-Webster เพราะพวกเขาโง่เพราะพวกเขาไม่เห็นด้วยกับฉัน ... hmmmm)


10

บางทีนี่อาจเป็นคำถามสำหรับhttps://english.stackexchange.com/แต่ฉันจะบอกว่ากระบวนการคอมไพล์รวมการคอมไพล์เป็นภาษาระดับสูงอีกภาษาหนึ่งและไม่ได้ จำกัด เฉพาะคอมไพเลอร์ที่คอมไพล์ด้วยรหัสเครื่องท้องถิ่น

ในฐานะที่เป็นคำว่า "คอมไพล์" ไม่เฉพาะเจาะจงกับคอมไพเลอร์คอมพิวเตอร์เลยและค่อนข้างทั่วไป "การรวบรวมตาราง" หรือ "การรวบรวมรายชื่อ" มาอยู่ในใจของฉันดังนั้นมันจึงกว้างพอสำหรับวัตถุประสงค์มากมาย (ตัวประมวลผลข้อความเช่นการรวบรวมน้ำยางข้นและอื่น ๆ ) เพื่อให้เฉพาะเจาะจงมากขึ้นเกี่ยวกับเป้าหมายของการคอมไพล์ฉันจะใช้to-source-compiler

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

ฉันจะอ่านคำสั่ง "Haxe" ในลักษณะที่มีไลบรารีมาตรฐานและสิ่งที่คล้ายกัน เช่นในกรณีนี้แพลตฟอร์มจะเป็น "ภาษา" และคุณสามารถแยกมันออกจากที่นั้นโดยเรียกว่า "แพลตฟอร์มการพัฒนาซอฟต์แวร์" เป็นต้น


4
ฉันคิดว่าคุณหมายถึง english.stackexchange.com?
Suman

3

คุณสามารถพูดได้ว่าคอมไพเลอร์มีภาษา X, Y และ Z เป็นเป้าหมายการแปลหรือออกแบบภาษาโดยมีเป้าหมายอยู่ในใจ


2

ฉันจะบอกว่าคอมไพเลอร์ตามคำนิยามแปลเป็นภาษาการเขียนโปรแกรมที่แตกต่างกัน (อย่างน้อยนี่คือคำจำกัดความที่ฉันรู้ - โปรแกรมที่แปลงภาษาหนึ่งเป็นอีกภาษาหนึ่ง) ตัวอย่างเช่นคอมไพเลอร์ C ส่วนใหญ่ผลิตชุดประกอบเป็นเอาท์พุท ผู้ประกอบคอมไพเลอร์ใช้เอาท์พุทนี้และแปลงมันเป็นรหัสไบนารี่ซึ่งเป็นภาษา (แน่นอน - อาจไม่มีใครเขียนเขียนในช่วง 40 ปีที่ผ่านมาหรือมากกว่านั้น แต่ในทางเทคนิคแล้วมันเป็นภาษา) - ซึ่งสามารถนำมาใช้ ops by โปรเซสเซอร์ (หรือมีการดำเนินการบางอย่างที่กระทำโดย linker ในไฟล์อ็อบเจ็กต์) ในทำนองเดียวกันjavapรวบรวมเป็น bytecode โดยปกติแล้วในตอนท้ายของห่วงโซ่ดังกล่าวจะมีล่ามซึ่งดำเนินการรหัสสุดท้าย (ไม่ว่าจะเป็น CPU, GPU หรือโปรแกรมที่ดำเนินการ) มี 'ไม่มีสิ่งเช่น' เป็นรหัสเครื่องที่ทันสมัย ​​x86 recompiles โปรแกรมในการดำเนินงานภายใน (micro-ops) และฉันสมบูรณ์แบบสามารถรักษารหัสเครื่อง ARM เป็นภาษาตีความใน x86 หรือวิธีอื่น ๆ (ในบางกรณีแม้แต่ recompile จากรูปแบบหนึ่งไปอีกรูปแบบหนึ่ง)

Haxe เป็นคอมไพเลอร์จากแหล่งสู่แหล่งที่มาเนื่องจากไม่ได้แปลงภาษาระดับสูงกว่าเป็นระดับที่ต่ำกว่าเป็นตัวอย่างก่อนหน้านี้ ดูเหมือนจะไม่ได้แก้ไขปัญหาของคุณโดยตรงเกี่ยวกับความคลุมเครือของหลายแพลตฟอร์ม แต่น่าเสียดายที่ฉันไม่คิดว่าจะมีวิธีการปฏิบัติที่แตกต่างระหว่างสองสิ่งนี้ - API เป็นภาษาที่สามารถตีความได้ทั่วไปแปลใหม่และอื่น ๆ


1

สิ่งแรกสิ่งแรก: ฉันไม่รู้ว่ามีคำที่เหมาะสมสำหรับคุณลักษณะนี้หรือไม่

แต่บางทีมันอาจเรียกว่าหลายภาษา? หรือใช้ภาษา เนื่องจากเป็นเรื่องเกี่ยวกับภาษาการเขียนโปรแกรมดังนั้นการกล่าวถึง 'language' ในชื่ออาจทำให้ชัดเจนมากกว่ามัลติแพลตฟอร์ม

แน่นอนว่าภาษานั้นมีความคลุมเครือเช่นกันเนื่องจากสามารถเข้าใจได้ว่าซอร์สโค้ดสามารถเขียนได้ในภาษาโลกแห่งความจริงใด ๆ (ตัวอย่างเช่นเนื่องจากตัวแปรสามารถเขียนในยูนิโค้ด)

ในทางกลับกันโปรแกรมเมอร์ที่ปรุงรสทุกคนอาจจะรู้จักโครงสร้างดังกล่าวแตกต่างจากการแปลเป็นภาษาท้องถิ่นหรือความเป็นสากลดังนั้นพวกเขาอาจ 'รับ' ได้ง่ายขึ้น

แค่ 2 เซ็นต์ของฉัน


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