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

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 ยังคงเป็นเส้นทางผลิตภัณฑ์หลัก