กลับไปหน้าบทความ

อ่าน 4 นาที

ซี--

C-- (โดยทั่วไปเขียนโดยใช้ เครื่องหมายยัติภังค์และลบ แต่ออกเสียงว่า ซี ลบ ลบ ) เป็น ภาษาโปรแกรม ที่คล้ายกับภาษา C ซึ่งออกแบบมาเพื่อให้ คอมไพเลอร์ สำหรับ ภาษาโปรแกรมระดับสูง...

ซี--

ซี--
โลโก้ที่ไม่เป็นทางการของภาษา C ซึ่งมีลักษณะคล้ายกับโลโก้ของภาษา C++ มาก
กระบวนทัศน์คำสั่ง
ออกแบบโดยไซมอน เพย์ตัน โจนส์และนอร์แมน แรมซีย์
ปรากฏครั้งแรก1998
วินัยในการพิมพ์คงที่อ่อนแอ
เว็บไซต์www.cs.tufts.edu/~nr/c--/
ได้รับอิทธิพลจาก
ซี

C-- (โดยทั่วไปเขียนโดยใช้เครื่องหมายยัติภังค์และลบแต่ออกเสียงว่าซี ลบ ลบ ) เป็นภาษาโปรแกรมที่คล้ายกับภาษา C ซึ่งออกแบบมาเพื่อให้ คอมไพเลอร์สำหรับภาษาโปรแกรมระดับสูงสร้างขึ้นเป็นหลักแทนที่จะเขียนโดยโปรแกรมเมอร์ที่เป็นมนุษย์ ภาษานี้ถูกสร้างขึ้นโดยนักวิจัยด้านการเขียนโปรแกรมเชิงฟังก์ชันSimon Peyton Jonesและ Norman Ramsey แตกต่างจากภาษาตัวกลางอื่นๆ หลายภาษาตรงที่มันถูกแสดงใน รูปแบบข้อความ ASCII ธรรมดา ไม่ใช่ไบต์โค้ดหรือรูปแบบไบนารี อื่นๆ [ 1 ] [ 2 ]

มีสองสาขาหลัก:

ออกแบบ

C-- เป็น " ภาษาแอสเซมบลี แบบพกพา " [ 6 ]ซึ่งออกแบบมาเพื่ออำนวยความสะดวกในการใช้งานคอมไพเลอร์ที่สร้างรหัสเครื่องคุณภาพ สูง [ 7 ] โดยมอบหมาย การสร้างรหัสระดับต่ำและการเพิ่มประสิทธิภาพโปรแกรม ให้กับคอมไพเลอร์ C-- ไวยากรณ์ของภาษายืมมาจาก C อย่างมาก ในขณะที่ละเว้นหรือเปลี่ยนแปลงคุณสมบัติมาตรฐานของ C เช่นฟังก์ชัน variadicไวยากรณ์ตัวชี้และแง่มุมของระบบประเภทของ C เนื่องจากถือว่าขัดขวางคุณสมบัติที่สำคัญของ C-- และความง่ายในการสร้างรหัส

ชื่อของภาษานี้เป็นมุกตลกภายในที่บ่งชี้ว่า C-- ตั้งใจให้เป็นรูปแบบย่อของ C ในทำนองเดียวกับที่ " C++ " ถูกเลือกเพื่อสื่อถึงเวอร์ชันที่ได้รับการปรับปรุงของ C (ใน C --และ++หมายถึง "ลด" และ "เพิ่ม" ตามลำดับ) [ 8 ]

การพัฒนาภาษา C-- เริ่มขึ้นในช่วงปลายทศวรรษ 1990 เนื่องจาก1การเขียนตัวสร้างโค้ด แบบกำหนด เองนั้นเป็นเรื่องท้าทาย และแบ็กเอนด์ คอมไพเลอร์ ที่มีให้สำหรับนักวิจัยในเวลานั้นมีความซับซ้อนและมีเอกสารประกอบที่ไม่ดี โครงการหลายโครงการจึงได้เขียนคอมไพเลอร์ที่สร้างโค้ด C (ตัวอย่างเช่น คอมไพเลอร์ Modula-3 ดั้งเดิม ) อย่างไรก็ตาม ภาษา C มีข้อเสียหลายประการสำหรับภาษาเชิงฟังก์ชัน: มันไม่รับประกันการเพิ่มประสิทธิภาพการเรียกแบบ tail-callหรือไม่รองรับการเก็บขยะ ที่แม่นยำ หรือการจัดการข้อยกเว้น ที่มีประสิทธิภาพ ภาษา C-- ถูกออกแบบมาให้เป็นทางเลือกที่เรียบง่ายกว่าและมีความชัดเจนกว่าภาษา C ซึ่งรองรับคุณสมบัติเหล่านี้ทั้งหมด คุณสมบัติที่ล้ำสมัยที่สุดคืออินเทอร์เฟซรันไทม์ที่อนุญาตให้เขียนตัวเก็บขยะแบบพกพา ระบบการจัดการข้อยกเว้น และคุณสมบัติรันไทม์อื่นๆ ที่ทำงานร่วมกับคอมไพเลอร์ C-- ใดๆ ก็ได้

C-- เวอร์ชันแรกได้รับการเผยแพร่ในเดือนเมษายน พ.ศ. 2541 ในรูปแบบเอกสาร MSRA [ 1 ]พร้อมกับเอกสารในเดือนมกราคม พ.ศ. 2542 เกี่ยวกับการเก็บขยะ[ 2 ]คู่มือฉบับปรับปรุงได้รับการเผยแพร่ในรูปแบบ HTML ในเดือนพฤษภาคม พ.ศ. 2542 [ 9 ]การเปลี่ยนแปลงครั้งใหญ่สองชุดที่เสนอในปี พ.ศ. 2543 โดย Norman Ramsey ("การเปลี่ยนแปลงที่เสนอ") และ Christian Lindig ("ไวยากรณ์ใหม่") นำไปสู่ ​​C-- เวอร์ชัน 2 ซึ่งได้รับการสรุปในราวปี พ.ศ. 2547 และเผยแพร่อย่างเป็นทางการในปี พ.ศ. 2548 [ 3 ]

ระบบประเภท

ระบบประเภท C-- ได้รับการออกแบบมาเพื่อสะท้อนข้อจำกัดที่กำหนดโดยฮาร์ดแวร์มากกว่าข้อกำหนดที่กำหนดโดยภาษาโปรแกรมระดับสูงกว่า ค่าที่จัดเก็บในรีจิสเตอร์หรือหน่วยความจำอาจมีประเภทเดียวเท่านั้น คือบิตเวกเตอร์อย่างไรก็ตาม บิตเวกเตอร์เป็น ประเภท โพลีมอร์ฟิกที่มีความกว้างหลายขนาด เช่นบิต 8บิต32 บิตหรือ64 บิตรองรับตระกูลประเภทจุดลอยตัว 32 หรือ 64 บิตแยกต่างหาก นอกจากประเภทบิตเวกเตอร์แล้ว C-- ยังมีประเภทบูลีนboolซึ่งสามารถคำนวณได้ด้วยนิพจน์และใช้สำหรับการควบคุมการไหลของโปรแกรม แต่ไม่สามารถจัดเก็บในรีจิสเตอร์หรือหน่วยความจำได้ เช่นเดียวกับในภาษาแอสเซมบลี วินัยประเภทที่สูงกว่า เช่น ความแตกต่างระหว่างจำนวนที่มีเครื่องหมาย จำนวนที่ไม่มีเครื่องหมาย จำนวนลอยตัว และตัวชี้ จะถูกกำหนดโดยตัวดำเนินการ C-- หรือโครงสร้างทางไวยากรณ์อื่นๆ C-- ไม่มีการตรวจสอบประเภท และไม่บังคับใช้หรือตรวจสอบข้อกำหนดการเรียกใช้[ 3 ] : 28

C-- เวอร์ชัน 2 ขจัดความแตกต่างระหว่างประเภทบิตเวกเตอร์และประเภทจุดลอยตัว ประเภทเหล่านี้สามารถระบุด้วยแท็กสตริง "kind" เพื่อแยกแยะความแตกต่างระหว่างประเภทจำนวนเต็มกับทศนิยมของตัวแปร และพฤติกรรมการจัดเก็บ (ส่วนกลางหรือส่วนท้องถิ่น) ประเภทจำนวนเต็มมีประโยชน์สำหรับเป้าหมายที่มีรีจิสเตอร์แยกต่างหากสำหรับค่าจำนวนเต็มและค่าจุดลอยตัว มีการแนะนำประเภทพิเศษสำหรับพอยเตอร์และคำดั้งเดิม แม้ว่าจะถูกแมปกับบิตเวกเตอร์ที่มีความยาวขึ้นอยู่กับเป้าหมายก็ตาม[ 3 ] : 10

ตัวอย่างโค้ด

โค้ด C-- ต่อไปนี้คำนวณผลรวมและผลคูณของจำนวนเต็ม 1 ถึงn [ 10 ] ( โดยรับ nเป็นอาร์กิวเมนต์) โค้ดนี้แสดงให้เห็นคุณลักษณะของภาษา 2 ประการ:

  • ขั้นตอนการทำงานอาจให้ผลลัพธ์ได้หลายรายการ
  • การเรียกซ้ำแบบหาง (Tail recursion) จะถูกร้องขออย่างชัดเจนด้วยคีย์เวิร์ด "jump"
/* การเรียกซ้ำแบบหาง */ ส่งออกsp ; sp ( bits32 n ) { กระโดดsp_help ( n , 1 , 1 ); }sp_help ( bits32 n , bits32 s , bits32 p ) { if n == 1 { return ( s , p ); } else { jump sp_help ( n - 1 , s + n , p * n ); } }

การนำไปใช้

หน้าข้อมูลจำเพาะของ C-- แสดงรายการการใช้งาน C-- เพียงไม่กี่รายการ คอมไพเลอร์ที่ "ได้รับการพัฒนาอย่างต่อเนื่องมากที่สุด" คือ Quick C-- ซึ่งถูกยกเลิกในปี 2013 [ 11 ]

ฮัสเคลล์

นักพัฒนา C-- บางคน รวมถึง Simon Peyton Jones, João Dias และ Norman Ramsey ทำงานหรือเคยทำงานเกี่ยวกับ GHC ซึ่งการพัฒนาของ GHC นำไปสู่ส่วนขยายในภาษา C-- ก่อให้เกิด ภาษาถิ่น Cmmซึ่งใช้พรีโปรเซสเซอร์ Cเพื่อความสะดวกในการใช้งาน[ 4 ] [ 12 ]

แบ็กเอนด์ของ GHC มีหน้าที่ในการแปลง C-- ให้เป็นโค้ดที่สามารถเรียกใช้งานได้ต่อไป โดยใช้LLVM IR, C ที่ทำงานช้า หรือโดยตรงผ่านแบ็กเอนด์เนทีฟในตัว[ 13 ] [ 14 ] [ 15 ]แม้ว่าเจตนาเดิมจะเป็นไปในทางตรงกันข้าม แต่ GHC ก็ดำเนินการเพิ่มประสิทธิภาพทั่วไปหลายอย่างกับ C-- เช่นเดียวกับ IR ของคอมไพเลอร์อื่นๆ การแสดงผล C-- สามารถดัมพ์เพื่อการดีบักได้[ 16 ]การเพิ่มประสิทธิภาพเฉพาะเป้าหมายจะดำเนินการในภายหลังโดยแบ็กเอนด์

ระบบประมวลผล

ณ ปี 2018 ระบบประมวลผลส่วนใหญ่ไม่ได้มีการบำรุงรักษา และไม่มีการเผยแพร่ซอร์สโค้ด

  • Quick C--คือคอมไพเลอร์ที่พัฒนาโดยทีม Quick C-- มันคอมไพล์โค้ด C-- เวอร์ชัน 2 ไปเป็นรหัสเครื่องสำหรับ Intel x86 Linux การคอมไพล์เป็นรหัสเครื่องสำหรับแพลตฟอร์มอื่นๆ นั้นมีให้ใช้งานในฐานะฟีเจอร์ทดลอง ก่อนหน้านี้ Quick C-- ถูกพัฒนาควบคู่ไปกับการวิวัฒนาการของข้อกำหนดภาษา C-- แต่โครงการถูกเก็บถาวรในปี 2019 บน GitHub และการพัฒนาได้หยุดลงแล้ว อย่างไรก็ตาม ซอร์สโค้ดยังคงมีให้ใช้งานได้ที่นั่น
  • cmcเป็นคอมไพเลอร์ C-- ที่เขียนด้วยภาษาโปรแกรม ML โดย Fermin Reig โดยจะสร้างรหัสเครื่องสำหรับสถาปัตยกรรม Alpha, Sparc และ x86 [ 17 ]
  • Trampoline C-- Compilerเป็นตัวแปลงโค้ด C-- เป็นโค้ด C ที่พัฒนาโดย Sergei Egorov ในเดือนพฤษภาคม 1999 มันแปลงโค้ด C-- ให้เป็นโค้ด C เพื่อให้สามารถคอมไพล์ได้โดยใช้คอมไพเลอร์ C มาตรฐาน
  • คอมไพเลอร์ C-- ของสถาบันบัณฑิตศึกษาแห่งรัฐโอเรกอน (OGI C-- Compiler) เป็นคอมไพเลอร์ C-- ต้นแบบรุ่นแรกสุด พัฒนาขึ้นในปี 1997 โดยใช้ภาษาโปรแกรม ML การบำรุงรักษา OGI C-- Compiler ได้ยุติลงเมื่อเริ่มการพัฒนา Quick C--

ดูเพิ่มเติม

  • คลังเก็บข้อมูลเว็บไซต์ทางการเก่า (cminusminus.org)
  • คลังโค้ด Quick C (ตัวอย่างการใช้งาน)
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=C--&oldid=1352733314 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ซี--

C-- (โดยทั่วไปเขียนโดยใช้ เครื่องหมายยัติภังค์และลบ แต่ออกเสียงว่า ซี ลบ ลบ ) เป็น ภาษาโปรแกรม ที่คล้ายกับภาษา C ซึ่งออกแบบมาเพื่อให้ คอมไพเลอร์ สำหรับ ภาษาโปรแกรมระดับสูง...

ออกแบบ

C-- เป็น " ภาษาแอสเซมบลี แบบพกพา " [ 6 ] ซึ่งออกแบบมาเพื่ออำนวยความสะดวกในการใช้งานคอมไพเลอร์ที่สร้าง รหัสเครื่อง คุณภาพ สูง [ 7 ] โดยมอบหมาย การสร้างรหัส ระดับต่ำและ การเพิ่มประสิทธิภาพโปรแกรม ให้กับคอมไพเลอร์ C-- ไวยากรณ์ ของภาษายืมมาจาก C อย่างมาก...

ระบบประเภท

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

ตัวอย่างโค้ด

โค้ด C-- ต่อไปนี้คำนวณผลรวมและผลคูณของจำนวนเต็ม 1 ถึง n [ 10 ] ( โดยรับ n เป็นอาร์กิวเมนต์) โค้ดนี้แสดงให้เห็นคุณลักษณะของภาษา 2 ประการ: