CLI-Framework für Rust: Erstellung leistungsstarker Konsolenanwendungen
Rust ist eine systemnahe Programmiersprache, die sich ideal für die Erstellung schneller und zuverlässiger Konsolen-Dienstprogramme eignet. Dank strenger Typisierung, Nullkosten-Abstraktionen und dem integrierten Paketmanager Cargo ermöglicht Rust die Entwicklung von CLI-Tools, die sofort arbeiten und keinen Interpreter benötigen. In diesem Artikel betrachten wir drei beliebte CLI-Frameworks für Rust: clap, structopt und argh, und zeigen, wie man mit ihnen professionelle Konsolenanwendungen erstellt.
Warum Rust für CLI?
Rust wird aus mehreren Gründen für die CLI-Entwicklung gewählt:
- Leistung — kompilierter Code arbeitet auf dem Niveau von C/C++.
- Speichersicherheit — das Ownership-System schließt Speicherlecks und Datenrennen aus.
- Plattformunabhängigkeit — eine Codebasis funktioniert unter Windows, macOS und Linux.
- Ökosystem — Tausende fertiger Crates für jede Aufgabe.
1. Clap — der Industriestandard
clap (Command Line Argument Parser) ist das beliebteste Framework zum Parsen von Befehlszeilenargumenten in Rust. Es unterstützt Positionsargumente, Optionen, Flags, Unterbefehle, automatische Hilfegenerierung und Autovervollständigung für Bash/Zsh/Fish.
Installation
Fügen Sie in Cargo.toml hinzu:
[dependencies]clap = { version = "4.5", features = ["derive"] }Beispiel: Ein einfacher Taschenrechner
use clap::Parser;
#[derive(Parser)]#[command(name = "calc")]#[command(about = "Einfacher CLI-Taschenrechner")]struct Cli { /// Erste Zahl a: f64,
/// Zweite Zahl b: f64,
/// Operation: add, sub, mul, div #[arg(short, long, default_value = "add")] operation: String,}
fn main() { let cli = Cli::parse(); let result = match cli.operation.as_str() { "add" => cli.a + cli.b, "sub" => cli.a - cli.b, "mul" => cli.a * cli.b, "div" => { if cli.b == 0.0 { eprintln!("Fehler: Division durch Null"); std::process::exit(1); } cli.a / cli.b } _ => { eprintln!("Unbekannte Operation: {}", cli.operation); std::process::exit(1); } }; println!("Ergebnis: {}", result);}Ausführung:
cargo run -- 10 5 --operation mul# Ausgabe: Ergebnis: 502. Structopt — eleganter Ansatz
structopt war früher eine separate Crate, aber seine Funktionalität ist jetzt über derive-Makros in clap integriert. Viele ältere Projekte verwenden es jedoch weiterhin direkt. Structopt ermöglicht es, Argumente als Felder einer Struktur mit Annotationen zu beschreiben.
Installation (für Legacy-Projekte)
[dependencies]structopt = "0.3"Beispiel: Dienstprogramm für Dateiarbeit
use structopt::StructOpt;use std::path::PathBuf;
#[derive(StructOpt)]#[structopt(name = "fileutil", about = "Dienstprogramm für Dateiarbeit")]struct Opt { /// Eingabedatei #[structopt(parse(from_os_str))] input: PathBuf,
/// Ausgabedatei (optional) #[structopt(parse(from_os_str), short = "o", long = "output")] output: Option<PathBuf>,
/// Modus: copy oder move #[structopt(short, long, default_value = "copy")] mode: String,
/// Verbose-Flag #[structopt(short, long)] verbose: bool,}
fn main() { let opt = Opt::from_args(); if opt.verbose { println!("Verarbeite Datei: {:?}", opt.input); } // Logik zum Kopieren/Verschieben}3. Argh — Minimalismus und Geschwindigkeit
argh ist ein leichtes Framework mit minimalen Abhängigkeiten
Auch in der Bibliothek
Autorisierung und Authentifizierung in Kotlin: JWT, Spring Security und Ktor
SwiftyUserDefaults für Swift: Komplette Anleitung mit Beispielen
Arbeiten mit Daten in Swift (iOS/macOS): Bibliotheken und Werkzeuge
opentelemetry-go für Go: Vollständiges Tutorial mit Beispielen