Rust: алғашқы қадамнан жеке жоспарлау құралына дейін 58-сабақ (барлығы 60)
Бағдарламаны құрастыру және тарату
Сабақ 58. Өз жүйеңізге арналған нұсқаны құрастырып, нөмірін көрсетіп, түсінікті мұрағатты беру.
Мәтін ИИ көмегімен аударылды.
Баптаулар мен README-ді және автоматты тексерулерді еске түсіріңіз. Тексерілген оқу жобасын ғана бөлек қалтадан таратыңыз.
Таныс бейне және тірек сызба
Ас әзірлеу жолы мен дайын нан — екі бөлек нәрсе. Бастапқы код ас әзірлеу жолына, ал орындалатын файл нақты пеште піскен нанға ұқсайды. Тірек сызба: кодты тексеру → тарату нұсқасын құрастыру → файлды іске қосу → README мен рұқсат хабарын қосу → мұрағатты беру → ашқаннан кейін қайта тексеру. Ұқсастықтың шегі: бір жүйеге арналған файл басқа жүйеде көбіне тікелей іске қосылмайды.
cargo build --release таратуға арналған баптаумен құрастырады; ол оқу кезіндегі cargo build пәрменінен ұзақ болуы мүмкін, бірақ нәтиже пайдалануға лайықталып жасалады. Cargo файлды target/release қалтасына қояды: Windows-та organizer.exe, macOS/Linux-та organizer. Cargo.toml ішіндегі version = "0.1.0" — жоба нөмірі. env!("CARGO_PKG_VERSION") — макрос: Cargo құрастыру кезінде осы орынға манифест нөмірін қояды. Ол бағдарламаға енгізіледі, іске қосу ортасындағы айнымалы өзгерсе де өзгермейді. #[test] нөмірдің үш бөлігін тексереді; үш бөлік өздігінен үйлесімділікке кепіл емес. Мұрағат — бағдарлама, нұсқау және қажет рұқсат хабарларын бір файлға жинау тәсілі.
Іске қосып, талдаңыз
Манифестегі license = "MIT" өрісі тек осы оқу кодының қолдану шартын көрсетеді; өз жаңа кодыңыз үшін шартты саналы түрде таңдаңыз. Жеке Cargo жобасында version = "0.1.0" деп жазып, алғашқы Rust үзіндісін src/main.rs файлына қойыңыз. cargo test --locked, одан кейін cargo build --release орындаңыз. Жиналған файлды target/release ішінен іске қосыңыз; төмендегі нәтиже осы манифестке арналған. version өзгерсе, қайта құрастыру қажет, әйтпесе ескі файл бұрынғы нөмірді көрсетеді. Оқу қалтасында README.md жасаңыз: қажет жүйені, іске қосу жолын және органайзер дерегі бағдарламадан бөлек сақталатынын жазыңыз. Курс мысалдарына LICENSE-COURSE ішіндегі MIT бөлімі қолданылады; кодтың елеулі бөлігін бергенде авторлық және рұқсат хабарын сақтаңыз.
Қолмен тексергенде бір құрал жасаған ZIP мұрағаты macOS-та ашылған соң іске қосу құқығын жоғалтты. macOS/Linux үшін бұл құқықты сақтайтын tar.gz ыңғайлы; егер ашылған файл құқық себебінен іске қосылмаса, оның қалтасындағы chmod +x organizer пәрмені орындау құқығын қосады (chmod құқықты өзгертеді, +x іске қосуға рұқсат береді). Windows-та құқық тәртібі бөлек, онда organizer.exe файлын тексеріңіз.
macOS/Linux жүйесінде үш файл тұрған қалтада қайталанатын қадам үшін tar -czf organizer.tar.gz organizer README.md LICENSE, содан кейін осы қалтада бос extracted ішкі қалтасын жасап, оған өтіп, tar -xzf ../organizer.tar.gz орындаңыз: tar файлдарды жинап не ашады, -c мұрағат жасайды, -x ашады, -z gzip сығуын қолданады, -f мұрағат атын көрсетеді. Windows-та ZIP мұрағатын файл басқарғышымен жасап, ашылған .exe файлын тексеріңіз.
[package]
name = "organizer"
version = "0.1.0"
edition = "2024"
license = "MIT"
[dependencies]
fn main() {
println!("Нұсқа: {}", env!("CARGO_PKG_VERSION"));
}
#[test]
fn package_version_has_three_parts() {
let parts: Vec<&str> = env!("CARGO_PKG_VERSION").split('.').collect();
assert_eq!(parts.len(), 3);
}
Нұсқа: 0.1.0
Бетке қарамай жауап беріңіз
Cargo.tomlішіндегі нөмір өзгерсе, бұрын жиналған файл неге өзгермейді?- Мұрағатты ашқаннан кейін неге қайта тексеру керек?
- Орындалатын файлмен бірге адамға тағы не беру керек?
Тапсырма
Міндетті. --version сөзін өңдеуді және белгісіз аргумент үшін 2 аяқталу кодын қосыңыз. Тарату нұсқасын құрастырып, орындалатын файлды, README.md мен рұқсат хабарын бөлек қалтаға салыңыз; өз жүйеңіздің құралымен мұрағат жасаңыз. Оны сол жүйедегі басқа қалтаға ашып, бағдарламаны --version арқылы іске қосыңыз. Нәтижені алдын ала болжаңыз.
Жауаптар
Жауаптарды көрсету
Бағдарлама атауынан кейінгі сөздерді std::env::args().skip(1) арқылы алыңыз. Қате үшін eprintln! мен std::process::exit(2) қолданыңыз. Оқу кодының рұқсат мәтінін LICENSE-COURSE файлынан алыңыз.
fn version_text() -> String {
format!("Нұсқа: {}", env!("CARGO_PKG_VERSION"))
}
fn run(args: &[String]) -> Result<String, String> {
match args {
[] => Ok(version_text()),
[flag] if flag == "--version" => Ok(version_text()),
_ => Err(String::from("Белгісіз аргумент")),
}
}
fn main() {
let args: Vec<String> = std::env::args().skip(1).collect();
match run(&args) {
Ok(message) => println!("{message}"),
Err(message) => {
eprintln!("{message}");
std::process::exit(2);
}
}
}
#[test]
fn prints_version_for_flag() {
assert!(run(&[String::from("--version")]).unwrap().contains("0.1.0"));
}
#[test]
fn rejects_unknown_argument() {
assert!(run(&[String::from("--unknown")]).is_err());
}
Нұсқа: 0.1.0
README.md:
# Органайзер 0.1.0
Мұрағат жасалған жүйеге арналған. Барлық файлды ашып, `organizer --version` орындаңыз (Windows: `organizer.exe --version`). Бұл оқу үлгісі тек нұсқаны көрсетеді, тапсырма файлын әлі ашпайды. Болашақ органайзердің тапсырма файлын бағдарламадан бөлек сақтап, көшірмесін жасаңыз. macOS/Linux жүйесінде ашылған файл құқық себебінен іске қосылмаса, осы қалтада `chmod +x organizer` орындаңыз. Қате шықса, stderr хабарын оқып, деректі бос файлмен алмастырмаңыз.
Тексергеннен кейін
Windows файлы macOS не Linux-та іске қосылады деп уәде бермеңіз. Басқа жүйеге бөлек файл құрастырып, сонда тексеріңіз; 57-сабақтағы CI кодты тексереді, бірақ дайын мұрағатты өздігінен бермейді. Құпия не жеке деректі оқу мұрағатына салмаңыз. cargo build құжаттамасы.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.