สวัสดีครับ พอดีคนรู้จักของผมเพิ่งพัฒนาคอมไพเลอร์แบ็กเอนด์ขึ้นมาตัวหนึ่งเมื่อไม่นานนี้ และคิดว่าน่าสนใจดีเลยอยากนำมาแชร์ครับ

  1. แนะนำโปรเจกต์

Lamina เป็นคอมไพเลอร์แบ็กเอนด์หลายสถาปัตยกรรมที่สร้างโค้ดเนทีฟได้โดยตรงจาก SSA-based IR โดยไม่ต้องพึ่งพา dependency ขนาดใหญ่แบบ LLVM
รองรับ x86_64, AArch64, RISC-V และ WebAssembly ผ่าน IR เดียวกัน

เขาบอกว่าทุกครั้งที่ทำ DSL ง่าย ๆ หรือภาษาเชิงทดลองขึ้นมาใหม่ การต้อง build LLVM และจัดการ dependency ขนาดหลาย GB มันหนักเกินไปมาก
เลยเริ่มจากแนวคิดว่า “ลองทำอะไรเบา ๆ ที่แค่ใส่ IR แล้วได้ assembly ออกมาเลยดีกว่า”

  1. คุณสมบัติหลัก

▸ ไม่มี external dependency
แปลงจาก IR ไปเป็น machine code โดยตรงโดยไม่ใช้ LLVM หรือ Cranelift
ใช้เวลาสร้างสั้นและ deploy ได้ง่าย

▸ SSA-based IR
เนื่องจากอยู่ในรูปแบบ Static Single Assignment จึงจัด pipeline สำหรับ optimization ได้อย่างเป็นระเบียบ

▸ memory model แบบ explicit
แยกการจัดสรร stack/heap ให้ชัดเจนตั้งแต่ระดับ IR ทำให้วิเคราะห์หน่วยความจำได้ง่าย

▸ หลายสถาปัตยกรรม
รองรับหลาย target ด้วย IR เดียว:

  • x86_64 (Linux, macOS, Windows)
  • AArch64/ARM64 (Linux, macOS, Windows)
  • RISC-V (RV32/64/128)
  • WebAssembly (32/64-bit)

▸ IRBuilder API
มี API สำหรับประกอบ IR ในสไตล์ functional
เขาบอกว่าสามารถใช้แสดง control flow หรือการทำงานกับหน่วยความจำได้อย่าง type-safe

  1. สถานะปัจจุบัน

ตอนนี้รองรับการคำนวณเลขพื้นฐาน, control flow อย่างเงื่อนไข/branch/loop, การเรียกฟังก์ชันแบบไม่เรียกซ้ำตัวเอง และ optimization แบบง่าย ๆ แล้ว

แม้จะยังไม่ production-ready แต่ก็บอกว่าเพียงพอสำหรับทดลองกับ toy language หรือใช้เป็นแบ็กเอนด์ของ DSL

  1. เวิร์กโฟลว์การใช้งาน

คร่าว ๆ คือใช้งานประมาณนี้:

  1. parse ภาษาต้นทางแล้วสร้าง AST
  2. แปลง AST เป็น Lamina IR ด้วย IRBuilder
  3. ให้ Lamina ทำ optimization และสร้างโค้ดเนทีฟตาม target

ถ้าเขียนส่วนสร้าง IR ได้ดี ที่เหลือ Lamina จะจัดการให้เอง

  1. ทิ้งท้าย

ส่วนตัวผมเคยรู้สึกว่าการ “สร้างคอมไพเลอร์แบ็กเอนด์” เป็นเรื่องที่ไกลตัวมาก
แต่พอได้เห็นคนรู้จักสร้างขึ้นมาจริง ๆ ก็รู้สึกทึ่งเหมือนกันครับ

แน่นอนว่าอาจยังไม่ mature หรือ optimize ได้ระดับ LLVM แต่ถ้าเอาไว้ทดลองแบบเบา ๆ หรือใช้เพื่อการเรียนรู้ก็ดูน่าสนใจทีเดียว

ผมเองก็ได้ลองพัฒนาคอมไพเลอร์สำหรับ Eom Jun-sik Lang ผ่าน lamina มาแล้วเหมือนกัน

ถ้าใครสนใจก็ลองเข้าไปดูได้ครับ!

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น