Rust के लिए CLI फ्रेमवर्क: उपयोगिताओं के विकास के लिए पूर्ण गाइड

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

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

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

Rust के लिए CLI फ्रेमवर्क: शक्तिशाली कंसोल एप्लिकेशन बनाना

\n\n

Rust एक सिस्टम प्रोग्रामिंग भाषा है जो तेज़ और विश्वसनीय कंसोल उपयोगिताओं को बनाने के लिए एकदम सही है। सख्त टाइपिंग, शून्य-लागत एब्स्ट्रैक्शन और बिल्ट-इन पैकेज मैनेजर Cargo के कारण, Rust आपको CLI टूल विकसित करने की अनुमति देता है जो तुरंत काम करते हैं और किसी इंटरप्रेटर की आवश्यकता नहीं होती है। इस लेख में, हम Rust के लिए तीन लोकप्रिय CLI फ्रेमवर्क: clap, structopt और argh पर चर्चा करेंगे, और दिखाएंगे कि उनकी मदद से पेशेवर कंसोल एप्लिकेशन कैसे बनाएं।

\n\n

CLI के लिए Rust क्यों?

\n

CLI विकास के लिए Rust को कई कारणों से चुना जाता है:

\n
    \n
  • प्रदर्शन — संकलित कोड C/C++ के स्तर पर काम करता है।
  • \n
  • मेमोरी सुरक्षा — स्वामित्व प्रणाली मेमोरी लीक और डेटा रेस को समाप्त करती है।
  • \n
  • क्रॉस-प्लेटफ़ॉर्म — एक कोड बेस Windows, macOS और Linux पर काम करता है।
  • \n
  • इकोसिस्टम — किसी भी कार्य के लिए हजारों तैयार क्रेट (crates) उपलब्ध हैं।
  • \n
\n\n

1. Clap — उद्योग मानक

\n

clap (Command Line Argument Parser) Rust में कमांड लाइन आर्गुमेंट पार्स करने के लिए सबसे लोकप्रिय फ्रेमवर्क है। यह पोजीशनल आर्गुमेंट, ऑप्शन, फ्लैग, सबकमांड, स्वचालित हेल्प जनरेशन और Bash/Zsh/Fish के लिए ऑटो-कम्प्लीशन को सपोर्ट करता है।

\n\n

इंस्टॉलेशन

\n

Cargo.toml में जोड़ें:

\n
[dependencies]\nclap = { version = "4.5", features = ["derive"] }
\n\n

उदाहरण: सरल कैलकुलेटर

\n
use clap::Parser;\n\n#[derive(Parser)]\n#[command(name = "calc")]\n#[command(about = "सरल CLI कैलकुलेटर")]\nstruct Cli {\n    /// पहली संख्या\n    a: f64,\n\n    /// दूसरी संख्या\n    b: f64,\n\n    /// ऑपरेशन: add, sub, mul, div\n    #[arg(short, long, default_value = "add")]\n    operation: String,\n}\n\nfn main() {\n    let cli = Cli::parse();\n    let result = match cli.operation.as_str() {\n        "add" => cli.a + cli.b,\n        "sub" => cli.a - cli.b,\n        "mul" => cli.a * cli.b,\n        "div" => {\n            if cli.b == 0.0 {\n                eprintln!("त्रुटि: शून्य से भाग");\n                std::process::exit(1);\n            }\n            cli.a / cli.b\n        }\n        _ => {\n            eprintln!("अज्ञात ऑपरेशन: {}", cli.operation);\n            std::process::exit(1);\n        }\n    };\n    println!("परिणाम: {}", result);\n}
\n

चलाएँ:

\n
cargo run -- 10 5 --operation mul\n# आउटपुट: परिणाम: 50
\n\n

2. Structopt — सुरुचिपूर्ण दृष्टिकोण

\n

structopt पहले एक अलग क्रेट था, लेकिन अब इसकी कार्यक्षमता derive मैक्रोज़ के माध्यम से clap में बनाई गई है। हालाँकि, कई पुराने प्रोजेक्ट अभी भी इसका सीधे उपयोग करते हैं। Structopt आपको एनोटेशन के साथ स्ट्रक्चर के फ़ील्ड के रूप में आर्गुमेंट का वर्णन करने की अनुमति देता है।

\n\n

इंस्टॉलेशन (लेगेसी प्रोजेक्ट्स के लिए)

\n
[dependencies]\nstructopt = "0.3"
\n\n

उदाहरण: फ़ाइलों के साथ काम करने की उपयोगिता

\n
use structopt::StructOpt;\nuse std::path::PathBuf;\n\n#[derive(StructOpt)]\n#[structopt(name = "fileutil", about = "फ़ाइलों के साथ काम करने की उपयोगिता")]\nstruct Opt {\n    /// इनपुट फ़ाइल\n    #[structopt(parse(from_os_str))]\n    input: PathBuf,\n\n    /// आउटपुट फ़ाइल (वैकल्पिक)\n    #[structopt(parse(from_os_str), short = "o", long = "output")]\n    output: Option<PathBuf>,\n\n    /// मोड: copy या move\n    #[structopt(short, long, default_value = "copy")]\n    mode: String,\n\n    /// Verbose फ़्लैग\n    #[structopt(short, long)]\n    verbose: bool,\n}\n\nfn main() {\n    let opt = Opt::from_args();\n    if opt.verbose {\n        println!("फ़ाइल प्रोसेस कर रहा हूँ: {:?}", opt.input);\n    }\n    // कॉपी/मूव का लॉजिक\n}
\n\n

3. Argh — न्यूनतम और गति

\n

argh एक हल्का फ्रेमवर्क है जिसमें न्यूनतम निर्भरताएँ हैं।

अनुशंसाएँ