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 और बार-बार उपभोग के मामले पकड़ता है। यह पूर्ण स्वामित्व प्रमाण नहीं है। संसाधन लोकल स्पष्ट एनोटेट करें और सफाई के लिए हर वापसी पथ जाँचें।

मॉड्यूल मेटाडेटा#

तीन फ़ाइलें अलग काम करती हैं:

FilePurpose
.nanoस्रोत और सार्वजनिक घोषणाएँ
module.jsonमूल निर्माण स्रोत, फ्लैग, पैकेज, और स्वामित्व मेटाडेटा
module.manifest.jsonखोज मेटाडेटा, स्थिरता, क्षमताएँ, और उदाहरण

शुद्ध मॉड्यूल को हमेशा मूल निर्माण मेटाडेटा नहीं चाहिए। अब क्या है उसके लिए जनित module inventory देखें।