The faber CLI
Faber build tool#
CLI faber เป็นจุดเริ่มต้นหลักสำหรับการสร้าง ตรวจสอบ รัน จัดรูปแบบ และทดสอบซอร์สโค้ด Faber โดยครอบ Radix compiler ไว้ในเครื่องมือสำหรับนักพัฒนาที่ใช้งานได้สะดวก
คำสั่งหลัก#
| คำสั่ง | วัตถุประสงค์ |
|---|---|
faber build <path> | คอมไพล์แพ็กเกจไปยังแบ็กเอนด์เป้าหมาย (ค่าเริ่มต้น: Rust) |
faber check <path> | ตรวจสอบชนิดโดยไม่สร้างโค้ด |
faber run <path> | สร้างและรันโปรแกรม |
faber test <path> | รันชุดทดสอบ proba |
faber format <path> | ใช้การจัดรูปแบบมาตรฐาน |
faber explain <code> | อธิบายโค้ดวินิจฉัย |
faber emit <path> | สร้างซอร์สโค้ดในรูปแบบเป้าหมาย |
การสร้างแพ็กเกจ#
faber build my-package/ -t rustแฟล็ก -t ใช้เลือกเป้าหมายการสร้างโค้ด เป้าหมายที่รองรับ ได้แก่ rust (ค่าเริ่มต้น), wasm, typescript และ go
การตรวจสอบโดยไม่สร้างผลลัพธ์#
faber check my-package/คำสั่งนี้จะรันกระบวนการส่วนหน้าทั้งหมด (lex → parse → typecheck → MIR lowering) โดยไม่สร้างไฟล์ผลลัพธ์ ใช้คำสั่งนี้ใน CI และการเชื่อมต่อกับเอดิเตอร์
การรันทดสอบ#
faber test my-package/คอมไพล์ชุดทดสอบ probandum ทั้งหมดในแพ็กเกจเป็นฟังก์ชัน #[test] ของ Rust แล้วรันผ่าน Cargo การทดสอบแบบฝังอยู่ร่วมกับซอร์สโค้ดได้โดยตรง จึงไม่จำเป็นต้องมีไบนารีทดสอบแยกต่างหาก
การจัดรูปแบบ#
faber format my-package/ใช้ตัวจัดรูปแบบมาตรฐานของ Faber ตัวจัดรูปแบบจะบังคับใช้เลย์เอาต์ที่สอดคล้องกัน ได้แก่ การประกาศหนึ่งรายการต่อบรรทัด การเว้นวรรคตามมาตรฐาน และรูปแบบคีย์เวิร์ดที่เป็นมาตรฐาน
การอธิบายผลการวินิจฉัย#
faber explain SEM001แสดงคำอธิบายที่อ่านเข้าใจง่ายสำหรับโค้ดวินิจฉัยทุกแบบที่คอมไพเลอร์สามารถสร้างได้ เหมาะสำหรับเรียนรู้ความหมายของข้อผิดพลาดและวิธีแก้ไข
In-process scripting#
นอกเหนือจากเส้นทาง Rust ที่คอมไพล์แล้ว Faber ยังรองรับการทำงานแบบตีความภายในโปรเซสผ่าน MIR stepper
การใช้งาน#
faber run --interpret script.fabส่วนนี้จะเรียกใช้ซอร์ส Faber ภายในโปรเซส หลังจากส่วนหน้าตามปกติของคอมไพเลอร์ทำงานเสร็จแล้ว (ตั้งแต่การแยกวิเคราะห์จนถึงการตรวจสอบชนิดและการลดรูปเป็น MIR) โดยไม่เรียกใช้ rustc หรือเริ่มกระบวนการ build
วิธีการทำงาน#
คอมไพเลอร์จะสร้าง HIR ที่ผ่านการวิเคราะห์แล้ว MIR ที่ผ่านการตรวจสอบ และตาราง runtime intrinsic ที่แก้ความกำกวมแล้ว MIR stepper จะส่งต่อบล็อก MIR ไปยังโฮสต์โดยตรง และข้ามรอบการสร้างและสร้างอินสแตนซ์ wasm:
Source → Lex → Parse → Collect → Resolve → Lower → Typecheck
↓
MIR lowering
↓
MIR stepper + Hostเวลาแฝง#
เส้นทางสคริปต์ใช้ส่วนหน้าเชิงเส้นเดียวกับเส้นทางที่คอมไพล์แล้ว และเพิ่มเวลาสำหรับ stepper ตามสัดส่วนของสิ่งที่สคริปต์เรียกใช้งานจริง:
| ระยะ | ค่าใช้จ่าย |
|---|---|
| ส่วนหน้า (สคริปต์ 100 บรรทัด) | ~0.6 ms |
| การประมวลผล MIR ทีละขั้น | แปรผันตามจำนวนคำสั่งที่ทำงาน |
stepper จะไม่เรียกใช้ rustc หรือเริ่มกระบวนการใด ๆ ดังนั้นเวลาเริ่มต้นจึงเร็วพอที่จะให้ความรู้สึกเหมือนสคริปต์ shell
ข้อจำกัด#
- MIR stepper ไม่รองรับเส้นทาง I/O ของโฮสต์ทั้งหมดที่เส้นทางคอมไพล์แล้วรองรับ — wrapper บางส่วนของ
norma:*ยังใช้งานได้เฉพาะในเส้นทางคอมไพล์ - stepper เป็นตัวประมวลผลสำหรับการวินิจฉัยและการอ้างอิงที่ทำงานบน MIR โดยตรง ไม่ใช่ runtime สำหรับใช้งานจริงในแอปพลิเคชันที่นำไป deploy
- การคอมไพล์แพ็กเกจผ่าน Cargo ยังคงเป็นเส้นทางผลิตภัณฑ์หลัก