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

  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 มาแล้วเหมือนกัน

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

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

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