रेंडरिंगhi

The faber CLI

Faber build tool#

faber CLI Faber स्रोत बनाने, जाँचने, चलाने, फ़ॉर्मैट करने और परीक्षण करने का मुख्य प्रवेश-बिंदु है। यह Radix कंपाइलर को डेवलपर के लिए सुविधाजनक टूल में समाहित करता है।

मुख्य कमांड#

कमांडउद्देश्य
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 सुइट को Rust की #[test] फ़ंक्शन में कंपाइल करता है और उन्हें Cargo के माध्यम से चलाता है। इनलाइन परीक्षण स्रोत कोड के साथ ही रहते हैं — अलग परीक्षण बाइनरी की आवश्यकता नहीं होती।

फ़ॉर्मैटिंग#

faber format my-package/

मानक Faber फ़ॉर्मैटर लागू करता है। फ़ॉर्मैटर एकरूप लेआउट लागू करता है: प्रति पंक्ति एक घोषणा, मानक स्पेसिंग और एकरूप कीवर्ड सरफेस।

डायग्नॉस्टिक की व्याख्या#

faber explain SEM001

कंपाइलर द्वारा जारी किए जा सकने वाले किसी भी डायग्नॉस्टिक कोड की मानव-पठनीय व्याख्या प्रिंट करता है। यह समझने में उपयोगी है कि किसी त्रुटि का अर्थ क्या है और उसे कैसे ठीक किया जाए।

In-process scripting#

कम्पाइल किए गए Rust पथ के साथ-साथ, Faber MIR स्टेपर के माध्यम से इन-प्रोसेस इंटरप्रेटेड निष्पादन का भी समर्थन करता है।

उपयोग#

faber run --interpret script.fab

यह सामान्य कम्पाइलर के फ्रंट हाफ़ (पार्स से लेकर टाइपचेक और MIR लोअरिंग तक) के बाद Faber स्रोत को इन-प्रोसेस चलाता है। इसमें rustc को लागू नहीं किया जाता और न ही बिल्ड प्रक्रिया शुरू की जाती है।

यह कैसे काम करता है#

कम्पाइलर विश्लेषित HIR, सत्यापित MIR और रनटाइम इंट्रिंसिक की एक resolved तालिका तैयार करता है। MIR स्टेपर MIR ब्लॉक्स को सीधे होस्ट तक भेजता है और wasm emit/instantiate राउंड-ट्रिप को छोड़ देता है:

Source → Lex → Parse → Collect → Resolve → Lower → Typecheck
                                                      ↓
                                                 MIR lowering
                                                      ↓
                                              MIR stepper + Host

लेटेंसी#

स्क्रिप्टिंग पथ कम्पाइल किए गए पथ के समान रैखिक फ्रंटएंड चलाता है। इसके अतिरिक्त, स्टेपर का समय इस बात के अनुपात में होता है कि स्क्रिप्ट वास्तव में क्या निष्पादित करती है:

चरणलागत
फ्रंटएंड (100-पंक्ति स्क्रिप्ट)~0.6 ms
MIR स्टेपिंगनिष्पादित कथनों के अनुपात में

स्टेपर कभी rustc को लागू नहीं करता और न ही कोई प्रक्रिया शुरू करता है। इसलिए स्टार्टअप इतना तेज़ है कि यह शेल स्क्रिप्ट जैसा महसूस होता है।

सीमाएँ#

  • MIR स्टेपर उन सभी होस्ट I/O मार्गों का समर्थन नहीं करता जिन्हें कम्पाइल किया गया पथ करता है — कुछ norma:* रैपर केवल कम्पाइल किए जा सकते हैं
  • स्टेपर एक MIR-नेटिव डायग्नोस्टिक/रेफरेंस एक्ज़ीक्यूटर है, डिप्लॉय किए गए एप्लिकेशन के लिए प्रोडक्शन रनटाइम नहीं
  • Cargo के माध्यम से पैकेज कम्पाइलेशन अब भी मुख्य उत्पाद पथ है