Shanraq.org Shanraq.org
Бағдарламаны құрастыру және тарату
IT

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

Бетке қарамай жауап беріңіз

  1. Cargo.toml ішіндегі нөмір өзгерсе, бұрын жиналған файл неге өзгермейді?
  2. Мұрағатты ашқаннан кейін неге қайта тексеру керек?
  3. Орындалатын файлмен бірге адамға тағы не беру керек?

Тапсырма

Міндетті. --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)

Әзірге пікір жоқ. Бірінші болыңыз.