การเรนเดอร์th-TH

Inside Radix

Radix compiler#

Radix คือคอมไพเลอร์ของ Faber โดยเป็น crate ภายใน (radix/) ที่ ทำหน้าที่ติดตั้งกระบวนการคอมไพล์ทั้งหมด ตั้งแต่ข้อความต้นฉบับไปจนถึงแบ็กเอนด์เป้าหมาย

กระบวนการคอมไพล์#

Radix ลดรูปซอร์ส Faber ผ่านตัวแทนระหว่างการคอมไพล์สามระดับ:

  1. HIR (High-level IR) — แกนกลางด้านความหมาย การผสานรวม reader locale การตรวจสอบชนิดข้อมูล และแบ็กเอนด์ที่ทำงานโดยตรงกับ HIR จะทำงานในระดับนี้
  2. MIR (Mid-level IR) — IR ที่มีรูปแบบสอดคล้องกับการประมวลผล นี่คือขอบเขต ความเป็นเจ้าของด้านความหมาย ซึ่งการยืมและการวิเคราะห์เอฟเฟกต์จะทำงาน
  3. AIR (Autodiff IR) — การแปลงแบบฟังก์ชันบริสุทธิ์สำหรับการหาอนุพันธ์อัตโนมัติ และการหลอมรวม ซึ่งใช้โดยเลนเป้าหมาย GPU

เลนเป้าหมาย#

เลนIRเอาต์พุตสถานะ
รันไทม์ CPUMIRFMIR (รันไทม์ Rust)พร้อมใช้งาน
LLVMMIRข้อความ LLVMอยู่ระหว่างการทดลอง
WASMMIRข้อความ WebAssemblyอยู่ระหว่างการทดลอง
TypeScriptHIRซอร์ส TypeScriptอยู่ระหว่างการทดลอง
GoHIRซอร์ส Goอยู่ระหว่างการทดลอง
GPU/WGSLAIRWGSL ผ่าน WGPUอยู่ระหว่างการทดลอง

สถาปัตยกรรม#

Radix ใช้แนวทางส่งออกเป็นข้อความแทนการฝัง LLVM ไว้ภายใน แบ็กเอนด์เป้าหมาย จะสร้างข้อความในภาษาของตนเอง จากนั้นคอมไพล์ด้วยชุดเครื่องมือของเป้าหมายนั้น แนวทางนี้ทำให้คอมไพเลอร์มีทุกอย่างในตัวเอง และทำให้เอาต์พุตของเป้าหมายอ่านเข้าใจได้ง่าย

การวินิจฉัยข้อผิดพลาด#

Radix สร้างรหัสการวินิจฉัยแบบมีโครงสร้าง พร้อมตัวระบุที่คงที่:

  • LEX0xx — ข้อผิดพลาดของ lexer
  • PARSE0xx — ข้อผิดพลาดของ parser
  • SEM0xx — ข้อผิดพลาดจากการวิเคราะห์เชิงความหมาย
  • DEFER0xx — ฟีเจอร์ที่เลื่อนการใช้งาน (ไวยากรณ์ถูกต้อง แต่ยังไม่ได้ติดตั้ง)

คุณสามารถดูคำอธิบายของการวินิจฉัยแต่ละรายการได้ด้วย faber explain <code>

Radix compiler architecture#

Translation status: This page is currently available in English.

Read the English Radix compiler architecture reference.