परिचय: Rust में दस्तावेज़ीकरण टिप्पणियों से कहीं अधिक क्यों है
\n\nRust पारिस्थितिकी तंत्र अपनी कठोरता और विश्वसनीयता के लिए जाना जाता है। हालाँकि, सबसे सुंदर कोड भी गुणवत्तापूर्ण दस्तावेज़ीकरण के बिना बेकार है। प्रारंभिक स्तर पर, सार्वजनिक फ़ंक्शन के लिए /// की कुछ पंक्तियाँ लिखना पर्याप्त है। लेकिन जब आपका प्रोजेक्ट दर्जनों मॉड्यूल वाले कई क्रेट (crates) तक बढ़ जाता है, तो दस्तावेज़ीकरण की उन्नत तकनीकों का प्रश्न उठता है।
इस लेख में, हम उन उपकरणों और तकनीकों पर चर्चा करेंगे जो आपको एंटरप्राइज़-स्तरीय दस्तावेज़ीकरण बनाने में मदद करेंगे: उदाहरणों के स्वचालित परीक्षण से लेकर पुस्तकों के निर्माण और CI/CD के साथ एकीकरण तक।
\n\n1. Doctests: दस्तावेज़ीकरण जो झूठ नहीं बोलता
\n\nrustdoc की मुख्य विशेषता टिप्पणियों में सीधे निष्पादन योग्य कोड उदाहरणों को एम्बेड करने की क्षमता है। ऐसे उदाहरण cargo test चलाने पर स्वचालित रूप से संकलित और चलाए जाते हैं। यह सुनिश्चित करता है कि आपका दस्तावेज़ीकरण हमेशा अद्यतित रहे।
बेसिक doctest
\n/// दो संख्याओं का योग लौटाता है।\n///\n/// # उदाहरण\n///\n/// ```\n/// let result = my_crate::add(2, 3);\n/// assert_eq!(result, 5);\n/// ```\npub fn add(a: i32, b: i32) -> i32 {\n a + b\n}\n\ndoctest के साथ उन्नत तकनीकें
\nआप # का उपयोग करके तैयारी की पंक्तियों को छिपा सकते हैं जो दस्तावेज़ीकरण में प्रदर्शित नहीं होनी चाहिए:
/// # आरंभीकरण के साथ उदाहरण\n///\n/// ```\n/// # use std::collections::HashMap;\n/// let mut map = HashMap::new();\n/// map.insert("key", 42);\n/// assert_eq!(map.get("key"), Some(&42));\n/// ```\n\nआप यह भी जाँच सकते हैं कि कोड संकलित नहीं होता (उदाहरण के लिए, संकलन-समय त्रुटियों का प्रदर्शन):
\n/// ```compile_fail\n/// let x: i32 = "स्ट्रिंग"; // त्रुटि: प्रकार बेमेल\n/// ```\n\n2. दस्तावेज़ीकरण विशेषताएँ: नियंत्रण और मेटाडेटा
\n\n#[doc(...)] विशेषताएँ दस्तावेज़ीकरण के प्रदर्शन को ठीक से अनुकूलित करने की अनुमति देती हैं।
तत्वों को छिपाना
\n/// आंतरिक फ़ंक्शन, सार्वजनिक उपयोग के लिए अभिप्रेत नहीं है।\n#[doc(hidden)]\npub fn internal_helper() {}\n\nवर्गीकरण और खोज
\n/// नेटवर्क के साथ काम करने के लिए उपयोगिताओं का समूह।\n#[doc(alias = "net")]\n#[doc(alias = "socket")]\npub mod network {\n // ...\n}\n\nकिसी अन्य स्थान से दस्तावेज़ीकरण एम्बेड करना
\n/// सामान्य जानकारी के लिए [मॉड्यूल दस्तावेज़ीकरण](index.html) देखें।\n#[doc(include = "docs/faq.md")]\npub fn complex_function() {}\n\n3. Cross-references और नेविगेशन
\n\nRustdoc दस्तावेज़ीकरण के अन्य तत्वों के लिंक का समर्थन करता है। यह पढ़ने में आसान एक सुसंगत संरचना बनाता है।
\n\nफ़ंक्शन और प्रकारों के लिंक
\n/// इंस्टेंस बनाने के लिए [`Config::new`] का उपयोग करें।\n///\n/// अधिक जटिल कॉन्फ़िगरेशन के लिए मॉड्यूल [`config`] देखें।\npub struct Config { /* ... */ }\n\nबाहरी क्रेट के लिंक
\n/// यह फ़ंक्शन सीरियलाइज़ेशन के लिए [serde_json] का उपयोग करता है।\n///\n/// [serde_json]: https://docs.rs/serde_json\npub fn to_json() {}\n\n4. बड़े प्रोजेक्टों के लिए उपकरण: mdBook और क्रेट दस्तावेज़ीकरण
\n\nजब एक cargo doc पर्याप्त नहीं रह जाता है, तब mdBook मदद करता है - Markdown फ़ाइलों से पुस्तकें बनाने के लिए एक उपयोगिता। यह गाइड, ट्यूटोरियल और आर्किटेक्चर दस्तावेज़ीकरण लिखने के लिए आदर्श है।
mdBook के साथ त्वरित शुरुआत
\n# स्थापना\ncargo install mdbook\n\n# प्रोजेक्ट बनाना\nmdbook init my-book\ncd my-book\nmdbook serve --open\n\nrustdoc के साथ एकीकरण
\nआप #[doc = include_str!()] विशेषता का उपयोग करके mdBook से दस्तावेज़ीकरण को cargo doc में एम्बेड कर सकते हैं:
/// # आर्किटेक्चर\n///\n/// लाइब्रेरी आर्किटेक्चर का विस्तृत विवरण:\n///\n#[doc = include_str!("../docs/architecture.md")]\npub mod core {\n // ...\n}\n\n