Inside Radix
Radix compiler#
Radix คือคอมไพเลอร์ของ Faber โดยเป็น crate ภายใน (radix/) ที่
ทำหน้าที่ติดตั้งกระบวนการคอมไพล์ทั้งหมด ตั้งแต่ข้อความต้นฉบับไปจนถึงแบ็กเอนด์เป้าหมาย
กระบวนการคอมไพล์#
Radix ลดรูปซอร์ส Faber ผ่านตัวแทนระหว่างการคอมไพล์สามระดับ:
- HIR (High-level IR) — แกนกลางด้านความหมาย การผสานรวม reader locale การตรวจสอบชนิดข้อมูล และแบ็กเอนด์ที่ทำงานโดยตรงกับ HIR จะทำงานในระดับนี้
- MIR (Mid-level IR) — IR ที่มีรูปแบบสอดคล้องกับการประมวลผล นี่คือขอบเขต ความเป็นเจ้าของด้านความหมาย ซึ่งการยืมและการวิเคราะห์เอฟเฟกต์จะทำงาน
- AIR (Autodiff IR) — การแปลงแบบฟังก์ชันบริสุทธิ์สำหรับการหาอนุพันธ์อัตโนมัติ และการหลอมรวม ซึ่งใช้โดยเลนเป้าหมาย GPU
เลนเป้าหมาย#
| เลน | IR | เอาต์พุต | สถานะ |
|---|---|---|---|
| รันไทม์ CPU | MIR | FMIR (รันไทม์ Rust) | พร้อมใช้งาน |
| LLVM | MIR | ข้อความ LLVM | อยู่ระหว่างการทดลอง |
| WASM | MIR | ข้อความ WebAssembly | อยู่ระหว่างการทดลอง |
| TypeScript | HIR | ซอร์ส TypeScript | อยู่ระหว่างการทดลอง |
| Go | HIR | ซอร์ส Go | อยู่ระหว่างการทดลอง |
| GPU/WGSL | AIR | WGSL ผ่าน WGPU | อยู่ระหว่างการทดลอง |
สถาปัตยกรรม#
Radix ใช้แนวทางส่งออกเป็นข้อความแทนการฝัง LLVM ไว้ภายใน แบ็กเอนด์เป้าหมาย จะสร้างข้อความในภาษาของตนเอง จากนั้นคอมไพล์ด้วยชุดเครื่องมือของเป้าหมายนั้น แนวทางนี้ทำให้คอมไพเลอร์มีทุกอย่างในตัวเอง และทำให้เอาต์พุตของเป้าหมายอ่านเข้าใจได้ง่าย
การวินิจฉัยข้อผิดพลาด#
Radix สร้างรหัสการวินิจฉัยแบบมีโครงสร้าง พร้อมตัวระบุที่คงที่:
LEX0xx— ข้อผิดพลาดของ lexerPARSE0xx— ข้อผิดพลาดของ parserSEM0xx— ข้อผิดพลาดจากการวิเคราะห์เชิงความหมายDEFER0xx— ฟีเจอร์ที่เลื่อนการใช้งาน (ไวยากรณ์ถูกต้อง แต่ยังไม่ได้ติดตั้ง)
คุณสามารถดูคำอธิบายของการวินิจฉัยแต่ละรายการได้ด้วย faber explain <code>
Radix compiler architecture#
Translation status: This page is currently available in English.