Basa pemrograman Rust 1.45 release

diterbitake release 1.45 saka basa pemrograman sistem Rust, didegaké déning proyèk Mozilla. Basa kasebut fokus ing safety memori, nyedhiyakake manajemen memori otomatis, lan nyedhiyakake alat kanggo nggayuh paralelisme tugas sing dhuwur tanpa nggunakake pengumpul sampah lan runtime.

Manajemen memori otomatis Rust ngilangake kasalahan nalika manipulasi penunjuk lan nglindhungi saka masalah njedhul saka manipulasi memori tingkat kurang, kayata ngakses wilayah memori sawise wis dibebaske, null pointer dereferences, buffer overruns, etc. Pangatur paket dikembangake kanggo nyebarake perpustakaan, mesthekake perakitan lan ngatur dependensi dening proyek kasebut. Cargo, ngidini sampeyan entuk perpustakaan sing dibutuhake kanggo program ing siji klik. Repositori didhukung kanggo dadi tuan rumah perpustakaan peti.io.

Utama inovasi:

  • Ngilangi long-standing cacat nalika nindakake konversi antarane integer lan nomer floating point. Wiwit kompiler Rust nggunakake LLVM minangka backend, operasi konversi jinis ditindakake liwat instruksi kode perantara LLVM kayata ftoui, sing nduweni fitur sing penting - prilaku sing ora ditemtokake yen nilai sing diasilake ora cocog karo jinis target. Contone, nalika ngowahi nilai float 300 kanthi jinis f32 dadi tipe integer u8, asil ora bisa diprediksi lan bisa beda-beda ing sistem sing beda. Masalahe yaiku fitur iki katon ing kode sing ora ditandhani minangka "ora aman".

    Ing Rust 1.45, prilaku overflow ukuran jinis diatur kanthi ketat, lan operasi konversi "minangka" mriksa kebanjiran lan meksa nilai kasebut diowahi dadi nilai maksimal utawa minimal saka jinis target (kanggo conto ing ndhuwur, nilai saka 300 bakal diowahi dadi 255). Kanggo mateni pamriksan kasebut, panggilan API tambahan "{f64, f32}::to_int_unchecked" diwenehake, operasi ing mode ora aman.

    fn cast(x: f32) -> u8 {
    x ugi u8
    }

    fn utama() {
    let too_big = 300.0;
    let too_small = -100.0;
    ayo nan = f32::NAN;

    supaya x: f32 = 1.0;
    ayo y: u8 = ora aman {x.to_int_unchecked()};

    println!("too_ged_casted = {}", cast(too_ged)); // output 255
    println!("too_cilik_casted = {}", cast(banget_cilik)); // output 0
    println!("not_a_number_casted = {}", cast(nan)); // output 0
    }

  • Gunakake stabil makro proseduralekspresi, template, lan statement kaya fungsi. Sadurunge, macro kuwi ora bisa disebut nang endi wae, nanging mung ing bagean tartamtu saka kode (minangka telpon kapisah, ora intertwined karo kode liyane). Ngembangake cara bisa diarani makro, padha karo fungsi, minangka salah sawijining syarat kanggo nggawe kerangka web bisa digunakake. Rocket ing rilis stabil Rust. Sadurunge, entuk keluwesan tambahan kanggo nemtokake panangan ing Rocket mbutuhake fitur eksperimen sing disebut "proc_macro_hygiene", sing ora kasedhiya ing versi stabil Rust. Fungsi iki saiki dibangun dadi rilis stabil saka basa.
  • Diijini nggunakake kisaran kanthi jinis "char" kanggo ngulang nilai kisaran (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    kanggo ch ing 'a'.. = 'z' {
    print!("{}", ch);
    }
    println!(); // Bakal nyetak "abcdefghijklmnopqrstuvwxyz"

  • Bagean API anyar wis ditransfer menyang kategori stabil, kalebu stabil
    Arc::as_ptr,
    BtreeMap::remove_entry,
    Rc::as_ptr,
    rc::Lemah::as_ptr,
    rc::Lemah::from_raw,
    rc::Lemah::to_raw,
    str::strip_prefix,
    str::strip_sufiks,
    sinkronisasi::Lemah::as_ptr,
    sinkronisasi::Lemah::from_raw,
    sinkronisasi::Lemah::into_raw,
    karakter::UNICODE_VERSION,
    Span::resolved_at,
    Span:: dumunung_ing,
    Span::situs_campuran,
    unix :: proses :: CommandExt :: arg0.

  • Kompiler rustc wis nambahake dhukungan kanggo ngatasi macem-macem fitur platform target nggunakake gendera "target-feature", contone, "-C target-feature=+avx2,+fma". GendΓ©ra anyar uga ditambahake:
    "force-unwind-tables" kanggo generate tabel telpon unwind, preduli saka strategi nangani kacilakan; "embed-bitcode" kanggo ngontrol apa LLVM bitcode klebu ing rlibs kui. GendΓ©ra "embed-bitcode" diaktifake kanthi gawan ing Cargo kanggo ngoptimalake wektu mbangun lan konsumsi ruang disk.

  • Dhukungan tingkat katelu wis kasedhiya kanggo platform mipsel-sony-psp lan thumbv7a-uwp-windows-msvc. Tingkat katelu kalebu dhukungan dhasar, nanging tanpa tes otomatis lan publikasi bangunan resmi.

Kajaba iku, bisa dicathet critane babagan nggawe sing paling gampang app ing basa Rust, wiwit nggunakake bootloader sistem lan siap kanggo loading mandhiri tinimbang sistem operasi.
Artikel kasebut minangka sing pertama ing seri khusus kanggo nduduhake teknik sing dikarepake ing pemrograman tingkat rendah lan pangembangan OS.

Source: opennet.ru

Add a comment