-
จุดที่ภาษา C ควรปรับปรุงอย่างชัดเจน
- มาตรฐาน C23: ภาษา C มีการปรับปรุงอย่างสม่ำเสมอและปัจจุบันมาถึง C23 แล้ว อย่างไรก็ตามยังคงมีปัญหาที่ไม่ได้รับการแก้ไขอยู่
- ความพยายามของชุมชน Dlang: มีการฝังคอมไพเลอร์ C (ImportC) เข้าไว้ในคอมไพเลอร์ของภาษาโปรแกรม D เพื่อเปิดโอกาสในการแก้ปัญหาเหล่านี้
-
การประเมินนิพจน์ค่าคงที่
- ปัญหา: C สามารถคำนวณนิพจน์ง่าย ๆ ได้ในช่วงคอมไพล์ แต่ไม่สามารถเรียกใช้ฟังก์ชันได้
- ทางแก้ของ ImportC: ImportC อนุญาตให้เรียกใช้ฟังก์ชันในช่วงคอมไพล์ เพื่อก้าวข้ามข้อจำกัดนี้
-
การทดสอบหน่วยในช่วงคอมไพล์
- ปัญหาใน C: การทดสอบหน่วยในโค้ด C ต้องมีเป้าหมายการบิลด์แยกต่างหาก จึงยุ่งยาก
- ข้อดีของ ImportC: ImportC ทำให้สามารถรันการทดสอบหน่วยได้ง่ายผ่านการประเมินฟังก์ชันในช่วงคอมไพล์
-
การอ้างอิงประกาศล่วงหน้า
- ข้อจำกัดของ C: C ไวต่อ ลำดับของการประกาศ และไม่อนุญาตให้อ้างอิงล่วงหน้า
- ข้อดีของ ImportC: ImportC ไม่ยึดติดกับลำดับของการประกาศ และอนุญาตให้มีการประกาศแบบโกลบอลในลำดับใดก็ได้
-
การนำเข้าการประกาศ
- ปัญหาของวิธีเดิม: มีความยุ่งยากจากการต้องเขียนไฟล์ .h สำหรับทุกโมดูลภายนอก
- ทางแก้ของ ImportC: ImportC สามารถนำเข้าการประกาศได้โดยไม่ต้องใช้ไฟล์ .h จึงมีประสิทธิภาพกว่า
-
เอกสารอ้างอิง
- เอกสาร ImportC: ให้ข้อมูลโดยละเอียดเกี่ยวกับ ImportC
- เอกสารภาษา D: ให้ข้อมูลเพิ่มเติมเกี่ยวกับภาษา D
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
ไฟล์เฮดเดอร์ของภาษา C ดีตรงที่แยกส่วนสาธารณะกับไม่สาธารณะ, อินเทอร์เฟซกับอิมพลีเมนต์ได้อย่างชัดเจน ทำให้ดูวิธีใช้ไลบรารีได้ง่ายผ่านไฟล์
.h.hเป็นหลัก จึงดูต่างจากไฟล์.c.cก็ได้ แต่จะทำให้อ่านอินเทอร์เฟซได้ไม่สะดวกมีความเห็นว่าภาษา C ควรรันฟังก์ชันได้ในช่วงคอมไพล์ แต่ฟังก์ชันที่ใช้เวลารันนานอาจเป็นปัญหาได้
busybeaverมีข้อสงสัยว่าจะแก้ปัญหาเรื่องการประเมิน constant expression, การทำ unit test ตอนคอมไพล์, forward reference ของ declaration และการ import declaration ได้อย่างไร
การเขียน unit test สำหรับโค้ด C ทำได้ด้วย build system ที่ดีและ boilerplate เล็กน้อย
npyถ้าการประเมิน constant expression ซับซ้อน คอมไพเลอร์อาจช้าลงและอาจต้องมี VM
unit test ตอนคอมไพล์ดึงการควบคุมออกจากนักพัฒนา และบังคับให้ต้องผ่านขั้นตอนที่ไม่จำเป็นเพื่อให้งานเสร็จ
มีการถกเถียงว่าการเขียนนิยามฟังก์ชันแบบ "บนลงล่าง" ดีกว่าหรือไม่
ฟีเจอร์ที่อยากให้เพิ่มในภาษา C
deferของ Go และ Zig เป็นมาตรฐานจุดแข็งของ C คืออิมพลีเมนเตชันที่เรียบง่าย และการขยายขอบเขตครั้งใหญ่อาจไม่ใช่ความคิดที่ดี
เหตุผลที่การนิยามฟังก์ชันจากบนลงล่างอาจดีกว่า