Stale translation: the English source changed after this draft. Treat the English edition as the authority.
यह पृष्ठ मशीन-जनित मसौदा है और अभी मानव समीक्षा नहीं हुई है। कोड उदाहरण, आदेश और पहचानकर्ता अंग्रेज़ी में रहते हैं।
मॉड्यूल, FFI और संसाधन#
मॉड्यूल दृश्यता और सुरक्षा सीमा है। नए कोड को module, उपनाम, और योग्य सार्वजनिक नाम उपयोग करने चाहिए।
मॉड्यूल आयात करें#
module "modules/std/mathx/mathx.nano" as mathx
fn bounded(value: int) -> int {
return (mathx.mathx_clamp value 0 100)
}
shadow bounded {
assert (== (bounded -5) 0)
assert (== (bounded 120) 100)
}
पार्सर अभी भी विरासत import और from ... import ... रूप स्वीकार करता है। नए कोड के लिए उन्हें न चुनें।
दृश्यता#
घोषणाएँ डिफ़ॉल्ट निजी हैं। इच्छित सतह pub से चिह्नित करें:
fn internal_scale(value: int) -> int {
return (* value 2)
}
pub fn transform(value: int) -> int {
return (+ (internal_scale value) 1)
}
निजी सहायक अपने मॉड्यूल के भीतर कॉल योग्य रहते हैं। आयातक केवल सार्वजनिक घोषणाएँ कॉल कर सकते हैं।
विदेशी फलन#
विदेशी घोषणाएँ extern fn उपयोग करती हैं। प्रत्यक्ष कॉल को unsafe चाहिए जब तक पूरा आयातित मॉड्यूल unsafe न हो:
extern fn c_close(fd: int) -> int
fn close_fd(fd: int) -> int {
unsafe {
return (c_close fd)
}
}
असुरक्षित क्षेत्रों को संकीर्ण रखें। सीमा पर विदेशी मान सत्यापित करें और जब ईमानदारी से दिया जा सके तब टंकित रैपर उजागर करें।
संसाधन प्रकार#
resource struct एक एफ़ाइन संसाधन चिह्नित करता है जिसे अधिकतम एक बार उपभोग होना चाहिए:
resource struct FileHandle {
fd: int
}
मेरा संसाधन जाँचक महत्वपूर्ण use-after-consume और बार-बार उपभोग के मामले पकड़ता है। यह पूर्ण स्वामित्व प्रमाण नहीं है। संसाधन लोकल स्पष्ट एनोटेट करें और सफाई के लिए हर वापसी पथ जाँचें।
मॉड्यूल मेटाडेटा#
तीन फ़ाइलें अलग काम करती हैं:
| File | Purpose |
|---|---|
.nano | स्रोत और सार्वजनिक घोषणाएँ |
module.json | मूल निर्माण स्रोत, फ्लैग, पैकेज, और स्वामित्व मेटाडेटा |
module.manifest.json | खोज मेटाडेटा, स्थिरता, क्षमताएँ, और उदाहरण |
शुद्ध मॉड्यूल को हमेशा मूल निर्माण मेटाडेटा नहीं चाहिए। अब क्या है उसके लिए जनित module inventory देखें।