มีภาษาที่ transpiles ไป C ด้วยไวยากรณ์ที่ดีขึ้นหรือไม่ [ปิด]


19

CoffeeScript เป็นภาษาที่เปลี่ยนไปใช้ JavaScript ด้วยไวยากรณ์ที่สะอาดซึ่งได้รับแรงบันดาลใจจาก Ruby มีภาษาที่คล้ายกันซึ่ง transpiles เป็น C หรือไม่ทำให้โค้ดที่อ่านง่ายขึ้นโดยไม่กระทบต่อประสิทธิภาพ หากไม่มีสิ่งนี้เกิดขึ้นมีเหตุผลที่ดีที่จะไม่สร้างมันขึ้นมาหรือไม่?


10
อย่างไรก็ตามโปรดทราบว่า "คอมไพล์ถึง C" นั้นไม่เหมือนกันกับ "เร็วเท่ากับโปรแกรมซีดั้งเดิม" เมื่อสิ่งที่คอมไพล์ไปยัง C มันมักจะสร้างรหัสค่อนข้าง (หรือสมบูรณ์) แตกต่างจากสิ่งที่คนปกติจะเขียนใน C. มันอาจจะช้าลงอย่างมาก (หรือบางครั้งเร็วกว่า) กว่าปกติคุณเขียนด้วยมือ
Jerry Coffin

4
สิ่งที่ฉันไม่ชอบเกี่ยวกับคำตอบใด ๆ เหล่านี้คือพวกเขาเสนอภาษาที่แตกต่างอย่างสิ้นเชิงเช่น Vala สิ่งที่เกี่ยวกับ CoffeeScript คือว่ามันคือ Javascript แต่มีไวยากรณ์แตกต่างกัน
ศ. Falken สนับสนุนโมนิก้า


5
ฉันหวังว่า "transcompile" (คำ) จะเพิ่งตาย มันคือ "คอมไพล์" และ "คอมไพเลอร์" คุณไม่ต้องการคำศัพท์ใหม่เพียงเพราะภาษาเอาต์พุตไม่ใช่ x86 (และถ้าคุณคิดว่าคุณทำคุณจะไม่เข้าใจคอมไพเลอร์)
Leushenko

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

คำตอบ:


23

CoffeeScript รวบรวมไปยัง JavaScript ด้วยเหตุผลง่าย ๆ JavaScript เป็นภาษาฝั่งไคลเอ็นต์โดยพฤตินัยและมันจะไม่มีเหตุผลที่จะคาดหวังว่าผู้ขายเบราว์เซอร์จะสนับสนุน CoffeeScript โดยกำเนิดเมื่อสิ่งที่มันเสนอเป็นไวยากรณ์ทางเลือก

ในทำนองเดียวกันประเด็นหลักของภาษาระดับสูงต่อนักแปล C คือการพกพาได้ทันทีเนื่องจากมีคอมไพเลอร์ C สำหรับเกือบทุกแพลตฟอร์มและไลบรารี C มากมาย ตัวอย่างเช่นValaได้รับการออกแบบมาเพื่อ :

  1. เป็นคอมไพเลอร์สำหรับGObject ,
  2. สร้าง executables ดั้งเดิม (ผ่านคอมไพเลอร์ C ของเครื่อง)
  3. ทำการนับการอ้างอิงโดยอัตโนมัติและ
  4. ยังสามารถเข้าถึงได้โดยโปรแกรมเมอร์ GNOME C

GNOME เป็นโครงการที่เน้น C แบบดั้งเดิมและ GObject เขียนเป็นภาษา C โดยเฉพาะ Vala อาจไม่พบรักมากนักในหมู่นักพัฒนา GNOME ถ้าคอมไพล์รหัสเครื่องโดยไม่คำนึงถึงลักษณะที่เป็นมิตร (และไวยากรณ์) ดูเหมือนว่าทุกคนจะไม่ชอบไวยากรณ์จนถึงจุดที่ภาษาอื่นGenieสร้างขึ้นเพื่อปรับปรุง

สำหรับตัวอย่าง C ++ Facebook พัฒนาHipHopนักแปล PHP เป็น C ++ พวกเขาพยายามที่จะแก้ปัญหาที่เฉพาะเจาะจงมากการใช้งาน CPU โดยไม่ต้องเปลี่ยนรหัส PHP ทั้งหมดและฝึกอบรมวิศวกรของพวกเขาอีกครั้ง (หรือเลวร้ายที่สุดแทนที่พวกเขา) นี่เป็นตัวอย่างที่เฉพาะเจาะจงมากขึ้นเนื่องจากปัญหาความสามารถในการปรับขนาดของ Facebook นั้นมีความพิเศษไม่เหมือนใครและการเข้าถึงรหัส C ++ ระดับกลางอีกครั้งอาจเป็นประโยชน์ได้เนื่องจากส่วนขยาย PHP จะเขียนใน C และ C ++

ดังนั้นนักแปลจากภาษาระดับสูงไปยังอีกภาษาหนึ่งจึงเป็นความคิดที่ดีส่วนใหญ่เมื่อคุณต้องการเข้าถึงรหัสกลาง สำหรับ CoffeeScript รหัส JavaScript นั้นเป็นสิ่งจำเป็นเนื่องจากมีการยอมรับในเบราว์เซอร์ที่หลากหลายและสำหรับ Vala, Genie และ HipHop เนื่องจาก codebase ที่มีอยู่ เห็นได้ชัดว่ามีการเข้าถึงรหัสกลางหมายความว่าคุณสามารถเพิ่มประสิทธิภาพหากต้องการ

แต่โดยทั่วไปแล้วการพูดจะไม่เป็นการดีหากคุณจะสร้างภาษาที่แปลเป็นภาษา C หรือภาษาอื่น ๆ หากคุณไม่ได้ใช้โค้ดผลลัพธ์ มีภาษามากมายอยู่ที่นั่นหากคุณไม่สามารถรับมือกับ C ได้ให้เลือกภาษาอื่น บังเอิญคอมไพเลอร์ C ++ แรกที่เขียนโดย Bjarne Stroustrup, CFront เป็น C ที่มีตัวแปล Classes to C แต่ส่วนใหญ่เป็นเพราะเป็นภาษาใหม่จึงไม่สามารถบูต C กับ Class ได้


3
นอกจากนี้ยังมีนิ่ม
noɥʇʎԀʎzɐɹƆ

Swift สามารถคอมไพล์เป็น C ได้เช่นกัน
Quazi Irfan

9

ฉันจะกล่าวถึงบางประเด็นที่Yannis Rizosไม่ได้เป็นคำตอบที่ยอดเยี่ยมของเขา

ใช่มีหลายภาษา C เป็นเป้าหมายทั่วไปสำหรับคอมไพเลอร์แบ็คเอนด์เนื่องจากเป็นอุปกรณ์พกพาและปรับให้เหมาะสมอย่างไม่น่าเชื่อแม้ว่า LLVM จะมีจุดที่ไม่มากนัก

การใช้งานไม่กี่ฉันรู้ว่าทำเช่นนี้คือ:

  • C ++ (อย่างน้อยในวันแรก ๆ )
  • GHC Haskell (แม้ว่าตัวสร้างรหัสหลักคือ C--)
  • กลเม็ด / ไก่ / โครงการ Bigloo
  • ECL (เสียงกระเพื่อมสามัญ)
  • Perl
  • Vala & Genie

เร็วเท่ากับโปรแกรม C ดั้งเดิม

ไม่เพียงเพราะมันใช้ C เป็นภาษากลางไม่ได้หมายความว่าคุณจะได้ความเร็ว เหตุผล C รวดเร็วเนื่องจากวิธีการเขียนรหัสซึ่งแตกต่างจากภาษาอื่นอย่างเห็นได้ชัด มันเป็นแค่ชุดประกอบแบบพกพาไม่มีอะไรพิเศษ


1
C อยู่ไกลจากที่ประชุมมาก ...
Sarge Borsch

1
บางคนคิดว่า C เป็น "แอสเซมเบลอร์ระดับสูง" มันค่อนข้างใกล้กับเครื่อง แต่แน่นอนว่ามันไม่ใช่ opcodes
dstromberg

6

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


4

ValaและGenieเป็นทั้งสองภาษาที่รวบรวมเป็น C. haxeรวบรวมเป็น C ++ แต่ฉันไม่แน่ใจว่าเป็นสิ่งที่คุณต้องการ


2
คุณจะให้ความสำคัญกับการเพิ่มทรัพยากรเหล่านี้สักเล็กน้อยและทำไมคุณถึงแนะนำสิ่งเหล่านี้เมื่อตอบคำถามที่ถาม "คำตอบสำหรับลิงก์เท่านั้น"ไม่ได้รับการต้อนรับอย่างมากที่กองแลกเปลี่ยน
ริ้น

4

OCaml สามารถรวบรวมเพื่อ bytecode, รหัสท้องถิ่นสามารถตีความได้โดยตรงหรือสามารถรวบรวมไปที่ C


1
คุณจะอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่มันทำและทำไมคุณถึงแนะนำว่าเป็นการตอบคำถามที่ถาม "คำตอบสำหรับลิงก์เท่านั้น"ไม่ได้รับการต้อนรับอย่างล้นหลามในกองแลกเปลี่ยน
ริ้น

3
ฉันไม่เห็นว่าคำตอบของฉันคือ "คำตอบเฉพาะลิงก์" อันที่จริงฉันสามารถลบลิงค์และมันจะยังคงเป็นคำตอบที่ถูกต้อง คำถามคือ "มีภาษาที่ทำ X" และคำตอบของฉันคือ "language Y ทำ X" ความคิดเห็นนี้ยังใช้กับคำตอบของ Bilijk
barjak

3
  • คอมไพเลอร์ดั้งเดิม C ++ ของ Bjarne Stroustrop, "cfront", รวบรวม C ++ ถึง C, จากนั้นจะเลือกรันคอมไพเลอร์ C เพื่อสร้างโค้ดออบเจ็กต์ C ++ เกี่ยวกับ "ไม่ใช่เชิงทฤษฎี" อย่างที่คุณจะได้รับ :-)
  • คอมไพเลอร์คอมไพเลอร์ของ Unix "yacc" และ GNU "Bison" แปลภาษาอินพุตเป็น C. หลาย ๆ ระบบที่ซับซ้อนจำนวนมากถูกเขียนขึ้นด้วย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.