Rust के साथ मोनोरेपॉजिटरी: शुरुआती लोगों के लिए कोड संगठन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: Rust में मोनोरेपॉजिटरी की आवश्यकता क्यों है?

\n\n

जब आप Rust सीखना शुरू करते हैं, तो सबसे पहले आपका सामना cargo new के माध्यम से बनाई गई एक एकल परियोजना से होता है। लेकिन जब आपकी परियोजना बढ़ती है तो क्या करें: साझा लाइब्रेरी सामने आती हैं, कई निष्पादन योग्य फ़ाइलें (जैसे, सर्वर और क्लाइंट) होती हैं, या आप दोहराए जाने वाले कोड को एक अलग पैकेज में निकालना चाहते हैं?

\n\n

यहाँ मोनोरेपॉजिटरी (monorepo) मदद करता है — यह एक दृष्टिकोण है जिसमें कई परस्पर संबंधित परियोजनाओं (लाइब्रेरी और निष्पादन योग्य फ़ाइलों) का कोड एक ही रिपॉजिटरी में संग्रहीत किया जाता है। Rust इसके लिए एक अंतर्निहित समाधान प्रदान करता है — Cargo Workspaces (कार्यक्षेत्र)।

\n\n

इस लेख में, हम समझेंगे कि Rust में मोनोरेपॉजिटरी को शुरू से कैसे व्यवस्थित किया जाए: फ़ोल्डर संरचना से लेकर व्यावहारिक उदाहरणों तक। आप सीखेंगे कि कोड को मॉड्यूल में ठीक से कैसे विभाजित किया जाए, स्थानीय निर्भरताओं को कैसे जोड़ा जाए और बिल्ड का प्रबंधन कैसे किया जाए।

\n\n

1. Cargo Workspace क्या है और इसे कैसे बनाएं?

\n\n

कार्यक्षेत्र (workspace) क्रेट्स (crates) का एक सेट है जो एक ही Cargo.lock फ़ाइल और एक सामान्य target निर्देशिका का उपयोग करता है। यह निर्भरता संस्करणों के टकराव से बचाता है और संकलन को गति देता है।

\n\n

मोनोरेपॉजिटरी संरचना बनाना

\n\n

आइए दो क्रेट्स के साथ एक सरल मोनोरेपॉजिटरी बनाएं: एक utils लाइब्रेरी और एक app निष्पादन योग्य फ़ाइल।

\n\n
mkdir my_monorepo\ncd my_monorepo\ncargo new utils --lib\ncargo new app\n
\n\n

अब एक रूट Cargo.toml फ़ाइल बनाएं जो workspace घोषित करेगी:

\n\n
[workspace]\nmembers = [\n    "utils",\n    "app",\n]\n
\n\n

महत्वपूर्ण: सुनिश्चित करें कि utils/Cargo.toml और app/Cargo.toml फ़ाइलों में workspace फ़ील्ड के साथ कोई [package] अनुभाग नहीं है — इसकी आवश्यकता नहीं है। Cargo स्वयं समझ जाएगा कि यह workspace का हिस्सा है।

\n\n

प्रोजेक्ट संरचना

\n\n

बनाने के बाद, आपको इस प्रकार की संरचना मिलेगी:

\n\n
my_monorepo/\n├── Cargo.toml          # रूट workspace\n├── utils/\n│   ├── Cargo.toml\n│   └── src/\n│       └── lib.rs\n└── app/\n    ├── Cargo.toml\n    └── src/\n        └── main.rs\n
\n\n

2. कोड संगठन: लाइब्रेरी और मॉड्यूल

\n\n

अब utils लाइब्रेरी में कोड जोड़ें। मान लीजिए, हम संख्याओं और स्ट्रिंग्स के साथ काम करने के लिए सामान्य फ़ंक्शन बनाना चाहते हैं।

\n\n

लाइब्रेरी कोड (utils/src/lib.rs)

\n\n
pub mod math;\npub mod strings;\n
\n\n

मॉड्यूल फ़ाइलें बनाएं:

\n\n
// utils/src/math.rs\npub fn add(a: i32, b: i32) -> i32 {\n    a + b\n}\n\npub fn multiply(a: i32, b: i32) -> i32 {\n    a * b\n}\n
\n\n
// utils/src/strings.rs\npub fn greet(name: &str) -> String {\n    format!("नमस्ते, {}!", name)\n}\n\npub fn to_uppercase(text: &str) -> String {\n    text.to_uppercase()\n}\n
\n\n

निष्पादन योग्य फ़ाइल में लाइब्रेरी जोड़ना

\n\n

app/Cargo.toml फ़ाइल में, स्थानीय क्रेट पर निर्भरता निर्दिष्ट करें:

\n\n
[package]\nname = "app"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nutils = { path = "../utils" }\n
\n\n

अब app/src/main.rs में हम utils के फ़ंक्शन का उपयोग कर सकते हैं:

\n\n
use utils::math;\nuse utils::strings;\n\nfn main() {\n    let sum = math::add(5, 10);\n    println!("5 + 10 = {}", sum);\n\n    let greeting = strings::greet("दुनिया");\n    println!("{}", greeting);\n\n    let upper = strings::to_uppercase("rust rocks");\n    println!("{}", upper);\n}\n
\n\n

मोनोरेपॉजिटरी की रूट से कमांड के साथ प्रोजेक्ट चलाएं:

\n\n
cargo run -p app\n
\n\n

आप आउटपुट देखेंगे:

\n\n
5 + 10 = 15\nनमस्ते, दुनिया!\nRUST ROCKS\n
\n\n

3. विस्तारित संगठन: कई निष्पादन योग्य फ़ाइलें

\n\n

अक्सर मोनोरेपॉजिटरी में कई

ब्लॉग

पुस्तक अनुशंसाएँ