10 คะแนน โดย GN⁺ 2023-09-05 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ผู้เขียนทำความท้าทายที่ยากลำบากด้วยการเขียนคอมไพเลอร์ 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 ความคิดเห็น

 
GN⁺ 2023-09-05
ความคิดเห็นจาก Hacker News
  • บทความเกี่ยวกับการสร้างคอมไพเลอร์ C ด้วย Python 500 บรรทัด โดยมีการเปรียบเทียบกับคอมไพเลอร์ Tiny Pascal ที่เผยแพร่ในปี 1978
  • คอมไพเลอร์เป็นแบบ single-pass โดยมีการสร้างโค้ดระหว่างการพาร์ส ซึ่งเป็นคุณลักษณะที่ออกแบบมาสำหรับ C โดยเฉพาะเพื่อรองรับข้อจำกัดด้านหน่วยความจำของคอมพิวเตอร์ยุคแรก
  • ประโยชน์ของการเขียนคอมไพเลอร์ด้วยตนเองคือช่วยให้เข้าใจคอมไพเลอร์ อินเทอร์พรีเตอร์ ลิงเกอร์/โหลดเดอร์ และซอฟต์แวร์ระบบที่เกี่ยวข้อง อีกทั้งยังช่วยเรื่องความพยายามในการดีบักและยกระดับทักษะของนักพัฒนา
  • โปรเจ็กต์นี้คล้ายกับโปรเจ็กต์อื่น ๆ เช่นโปรเจ็กต์ TypeScript ที่สร้าง x86 assembly จากนั้นคอมไพล์เป็นไบนารีและรันมัน
  • บทความนี้ได้รับคำชื่นชมในด้านคำอธิบายที่ชัดเจน และถูกมองว่าเป็นความท้าทายที่สนุกในโลกของภาษาโปรแกรมแปลก ๆ (esolangs)
  • การเขียนคอมไพเลอร์ C ด้วยโค้ดที่เข้าใจง่ายเพียง 500 บรรทัดถือเป็นความท้าทายสำคัญที่แม้แต่นักพัฒนามากประสบการณ์ก็อาจต้องใช้เวลาหลายเดือน
  • บทความนี้กระตุ้นความอยากรู้อยากเห็นเกี่ยวกับคอมไพเลอร์ขนาดเล็กอื่น ๆ เช่นคอมไพเลอร์ Scheme to WASM
  • เพื่อใช้เปรียบเทียบ บทความได้กล่าวถึงจำนวนบรรทัดโค้ด (LOCs) ของคอมไพเลอร์ C หรือคอมไพเลอร์คล้าย C ขนาดเล็กอื่น ๆ รวมถึงคอมไพเลอร์ struct ยุคแรกที่สุดของ Ritchie และคอมไพเลอร์ C ของ v7 Unix