2025 में Rust: अभी क्यों?
\n\nपिछले तीन वर्षों में Rust ने एक वास्तविक सफलता हासिल की है। यह भाषा, जो शुरू में "जटिल और विशिष्ट" लगती थी, आज Linux कर्नेल, ब्राउज़रों (Firefox, आंशिक रूप से Chromium), DevOps टूल्स (ripgrep, fd, bat) और यहां तक कि वेब डेवलपमेंट में उपयोग की जाती है। 2025 में, Rust सिर्फ "एक और भाषा" नहीं है, बल्कि सुरक्षित, तेज़ और विश्वसनीय कोड लिखने के लिए नंबर एक टूल है।
\n\nलेकिन एक समस्या है: प्रवेश की बाधा। Rust अपने borrow checker, lifetimes और सख्त टाइप सिस्टम के लिए प्रसिद्ध है। कई शुरुआती कंपाइलर त्रुटियों में फंसकर दूसरे सप्ताह में ही सीखना छोड़ देते हैं।
\n\nयह लेख 2025 में Rust सीखने का रोडमैप है। मैंने विषयों का क्रम बताया है, वास्तविक कोड उदाहरण दिए हैं और समझाया है कि क्या सीखना अनिवार्य है और क्या बाद में छोड़ा जा सकता है। चलिए शुरू करते हैं!
\n\nचरण 1: नींव (सप्ताह 1–2)
\n\n1.1 इंस्टॉलेशन और पहला प्रोग्राम
\n\nआधिकारिक इंस्टॉलर rustup के माध्यम से इंस्टॉलेशन से शुरू करें। यह कंपाइलर और टूलचेन के संस्करणों का प्रबंधन करता है।
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nrustc --version\ncargo --version\n\nआपकी पहली फ़ाइल main.rs:
fn main() {\n println!("नमस्ते, Rust 2025 की दुनिया!");\n}\n\nकंपाइल करें: rustc main.rs && ./main। लेकिन बेहतर है कि तुरंत Cargo की आदत डालें - पैकेज मैनेजर और बिल्ड सिस्टम:
cargo new my_first_project\ncd my_first_project\ncargo run\n\n1.2 वेरिएबल, टाइप, नियंत्रण संरचनाएं
\n\nRust सख्ती से टाइप किया जाता है, लेकिन कंपाइलर अक्सर खुद टाइप का अनुमान लगाता है। Python या JavaScript से मुख्य अंतर यह है कि वेरिएबल डिफ़ॉल्ट रूप से अपरिवर्तनीय (immutable) होते हैं।
\n\nfn main() {\n let x = 5; // immutable\n let mut y = 10; // mutable\n y += 5;\n\n let name = "Rust";\n let year: u32 = 2025;\n\n if year > 2024 {\n println!("{} — भविष्य पहले से ही यहाँ है!", name);\n }\n\n for i in 0..5 {\n println!("गिनती: {}", i);\n }\n}\n\n1.3 स्वामित्व (Ownership) — आधारशिला
\n\nयह वह चीज़ है जो शुरुआती लोगों को सबसे ज्यादा डराती है। लेकिन ownership को समझे बिना आप कोई भी वास्तविक प्रोजेक्ट नहीं लिख पाएंगे। सार: Rust में प्रत्येक मान का ठीक एक मालिक होता है। जब मालिक दायरे से बाहर हो जाता है, तो मेमोरी मुक्त हो जाती है।
\n\nfn main() {\n let s1 = String::from("hello");\n let s2 = s1; // स्वामित्व s2 में स्थानांतरित हो जाता है\n\n // println!("{}", s1); // त्रुटि! s1 अब स्ट्रिंग का मालिक नहीं है\n println!("{}", s2); // ठीक है\n}\n\nयदि आपको स्वामित्व खोए बिना डेटा पास करना है, तो reference (संदर्भ) का उपयोग करें:
\n\nfn main() {\n let s = String::from("Rust");\n let len = calculate_length(&s); // उधार लेना\n println!("'{}' की लंबाई = {}", s, len); // s अभी भी उपलब्ध है\n}\n\nfn calculate_length(s: &String) -> usize {\n s.len()\n}\n\nचरण 2: गहराई (सप्ताह 3–5)
\n\n2.1 स्ट्रक्चर, एनम और पैटर्न मैचिंग
\n\nRust शास्त्रीय अर्थों में OOP भाषा नहीं है, लेकिन स्ट्रक्चर और ट्रेट्स (traits) 90% जरूरतों को पूरा करते हैं।
\n\nstruct User {\n username: String,\n email: String,\n active: bool,\n}\n\nenum Status {\n Active,\n Inactive,\n Banned { reason: String },\n}\n\nfn check_status(status: Status) {\n match status {\n Status::Active => println!("उपयोगकर्ता सक्रिय है"),\n Status::Inactive => println!("निष्क्रिय"),\n Status::Banned { reason } => println!("प्रतिबंधित: {}", reason),\n }\n}\n\n2.2 त्रुटि प्रबंधन: Option और Result
\n\nRust में अपवाद (exceptions) नहीं हैं। इसके बजाय, सुरुचिपूर्ण Result<T, E> और Option<T> हैं। try/except को भूल जाइए - अब आप match या ? का उपयोग करते हैं