- ผู้เขียนทำความท้าทายที่ยากลำบากด้วยการเขียนคอมไพเลอร์ C ด้วยโค้ด Python เพียง 500 บรรทัด
- คอมไพเลอร์นี้เป็นแบบ single-pass โดยสร้างโค้ดระหว่างการพาร์ส ต่างจากคอมไพเลอร์แบบ two-pass ทั่วไปที่มักสร้าง syntax tree ก่อนแล้วจึงแปลงเป็น machine code
- คอมไพเลอร์มุ่งเป้าไปที่ WebAssembly ซึ่งเป็นการตัดสินใจที่ขับเคลื่อนด้วยความอยากรู้อยากเห็นมากกว่าความใช้งานจริง โดยเน้นความท้าทายเฉพาะของ WebAssembly เช่น การไม่มีรีจิสเตอร์และการใช้ stack machine
- เนื่องจากข้อจำกัด 500 บรรทัด คอมไพเลอร์จึงไม่รองรับความสามารถบางอย่างของ C เช่น struct, enum, union, คำสั่งของ preprocessor, floating-point และชนิดข้อมูล 8 ไบต์
- คอมไพเลอร์ผ่านเคสทดสอบได้ 34 จาก 220 เคสของ c-testsuite และสามารถคอมไพล์กับรันโปรแกรมที่คำนวณลำดับฟีโบนัชชีได้สำเร็จ
- บทความนี้วิเคราะห์โค้ดของคอมไพเลอร์อย่างละเอียด พร้อมอธิบายว่าจัดการกับไวยากรณ์ C ในแง่มุมต่าง ๆ อย่างไร และมีความยากอะไรบ้างในการทำงานกับ WebAssembly
- แม้คอมไพเลอร์จะมีความซับซ้อน แต่ก็แสดงให้เห็นว่า หากยอมแลกคุณภาพของโค้ดและทำทุกอย่างในแบบ single-pass ทั้งหมด ก็สามารถทำให้สั้นกระชับได้อย่างน่าประหลาดใจ
- ผู้เขียนเสนอว่าคอมไพเลอร์แบบ single-pass ลักษณะนี้อาจเหมาะมากสำหรับใช้เป็น stage0 ของภาษาที่ self-hosting ได้ เพราะมีความกระชับ
- ผู้เขียนใช้เครื่องมือ
sloccount เพื่อวัดจำนวนบรรทัดของโค้ด โดยไม่นับคอมเมนต์, docstrings และบรรทัดว่าง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News