Rust 1.45 Programming Language Release

diterbitkeun ngabebaskeun 1.45 tina basa programming sistem karahaan, diadegkeun ku proyék Mozilla. Basa éta museurkeun kana kaamanan mémori, nyayogikeun manajemén mémori otomatis, sareng nyayogikeun alat pikeun ngahontal paralelisme tugas anu luhur tanpa nganggo tukang sampah sareng runtime.

Manajemén mémori otomatis Rust ngaleungitkeun kasalahan nalika ngamanipulasi pointer sareng ngajagi tina masalah anu timbul tina manipulasi mémori tingkat rendah, sapertos ngaksés daérah mémori saatos dibébaskeun, dereferences pointer null, overruns panyangga, jsb. Pangatur pakét dikembangkeun pikeun ngadistribusikaeun perpustakaan, mastikeun ngumpul sareng ngatur kagumantungan ku proyék. kargo, anu ngamungkinkeun anjeun kéngingkeun perpustakaan anu anjeun peryogikeun pikeun program dina hiji klik. Repository dirojong pikeun host perpustakaan crates.io.

utama inovasi:

  • Dileungitkeun lila-ngadeg cacad nalika ngalakukeun konvérsi antara integer sareng nomer floating point. Kusabab kompiler Rust nganggo LLVM salaku backend, operasi konvérsi tipe dilaksanakeun ngaliwatan paréntah kode perantara LLVM sapertos ftoui, nu boga hiji fitur signifikan - kabiasaan undefined lamun nilai hasilna teu pas kana tipe target. Contona, nalika ngarobah nilai ngambang 300 kalayan tipe f32 kana tipe integer u8, hasilna teu bisa diprediksi sarta bisa rupa-rupa dina sistem béda. Masalahna nyaéta fitur ieu muncul dina kode anu henteu ditandaan salaku "teu aman".

    Dina Rust 1.45, paripolah jenis limpahan ukuranana diatur sacara ketat, sareng operasi konvérsi "sakumaha" mariksa pikeun ngabahekeun sareng maksakeun nilaina dirobih kana nilai maksimum atanapi minimum tina jinis target (pikeun conto di luhur, nilai tina 300 bakal dirobah jadi 255). Pikeun nganonaktipkeun cék sapertos kitu, sauran API tambahan "{f64, f32}:: to_int_unchecked" disayogikeun, beroperasi dina modeu anu teu aman.

    fn tuang (x: f32) -> u8 {
    x oge u8
    }

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

    hayu x: f32 = 1.0;
    hayu y: u8 = teu aman {x.to_int_unchecked()};

    println!("too_big_casted = {}", cast(too_big)); // kaluaran 255
    println!("too_small_casted = {}", cast(teuing_small)); // kaluaran 0
    println!("not_a_number_casted = {}", tuang(nan)); // kaluaran 0
    }

  • Paké stabilized macros proseduraléksprési kawas fungsi, témplat, jeung pernyataan. Saméméhna, macros misalna teu bisa disebut madhab, tapi ngan dina bagian nu tangtu kode (salaku panggero misah, teu intertwined jeung kode sejenna). Ngalegaan cara makro tiasa disebut, sami sareng fungsi, mangrupikeun salah sahiji sarat pikeun ngajantenkeun kerangka wéb tiasa jalan. roket dina Kaluaran stabil tina Rust. Saméméhna, achieving kalenturan tambahan dina watesan pawang di Rocket diperlukeun sangkan hiji fitur eksperimen disebut "proc_macro_hygiene", nu teu sadia dina versi stabil tina Rust. Pungsi ieu ayeuna diwangun kana release stabil tina basa.
  • Diidinan ngagunakeun rentang kalayan tipe "char" pikeun iterate leuwih rentang nilai (ops:: {Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    pikeun ch dina 'a'.. = 'z' {
    print!("{}", ch);
    }
    println!(); // Bakal nyitak "abcdefghijklmnopqrstuvwxyz"

  • Bagian anyar API parantos dialihkeun kana kategori stabil, kalebet distabilkeun
    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,
    singkronisasi:: Lemah:: as_ptr,
    singkronisasi:: Lemah:: from_raw,
    singkronisasi:: Lemah:: kana_raw,
    karakter::UNICODE_VERSION,
    Span::resolved_at,
    Span::lokasi_di,
    Span::situs_campuran,
    unix :: prosés :: CommandExt :: arg0.

  • Kompiler rustc parantos nambihan dukungan pikeun nimpa sababaraha fitur platform target nganggo bandéra "target-feature", contona, "-C target-feature=+avx2,+fma". umbul anyar ogé geus ditambahkeun:
    "force-unwind-tables" pikeun ngahasilkeun tabel unwind panggero, paduli strategi penanganan kacilakaan; "embed-bitcode" pikeun ngadalikeun naha LLVM bitcode kaasup dina rlibs dihasilkeun. Bandéra "embed-bitcode" diaktipkeun sacara standar di Cargo pikeun ngaoptimalkeun waktos ngawangun sareng konsumsi rohangan disk.

  • Tingkat katilu dukungan parantos disayogikeun pikeun platform mipsel-sony-psp sareng thumbv7a-uwp-windows-msvc. Tingkat katilu ngalibatkeun dukungan dasar, tapi tanpa tés otomatis sareng publikasi wangunan resmi.

Sajaba ti éta, bisa dicatet carita ngeunaan nyieun pangbasajanna aktip dina basa Rust, dimimitian maké bootloader sistem tur siap loading timer ngandung tinimbang sistem operasi.
Tulisan éta mangrupikeun anu munggaran dina séri anu didédikasikeun pikeun nunjukkeun téknik anu dipénta dina program tingkat rendah sareng pamekaran OS.

sumber: opennet.ru

Tambahkeun komentar