Rust 1.45 Ukukhishwa Kolimi Lokuhlela

eshicilelwe ukukhishwa okungu-1.45 kolimi lokuhlela uhlelo Rust, eyasungulwa iphrojekthi ye-Mozilla. Ulimi lugxile ekuphepheni kwenkumbulo, luhlinzeka ngokuphathwa kwenkumbulo okuzenzakalelayo, futhi luhlinzeka ngamathuluzi okuthola ukufana kwemisebenzi ephezulu ngaphandle kokusebenzisa umqoqi kadoti kanye isikhathi sokuqalisa.

Ukuphathwa kwenkumbulo okuzenzakalelayo ka-Rust kuqeda amaphutha lapho kushintshwa izikhombi futhi kuvikela ezinkingeni ezivela ekukhohlisweni kwenkumbulo yezinga eliphansi, njengokufinyelela endaweni yenkumbulo ngemva kokuba ikhululiwe, i-null pointer dereferences, i-buffer overruns, njll. Umphathi wephakheji uyathuthukiswa ukuze asabalalise imitapo yolwazi, aqinisekise ukuhlanganisa nokuphatha ukuncika ngephrojekthi. cargo, okukuvumela ukuthi uthole amalabhulali adingekayo ohlelweni ngokuchofoza okukodwa. Indawo yokugcina isekelwa ukuze isingathe amalabhulali amakhreyithi.io.

main emisha:

  • Iqedwe isikhathi eside iphutha lapho wenza ukuguqulwa phakathi kwama-integer kanye nezinombolo zamaphuzu antantayo. Njengoba i-Rust compiler isebenzisa i-LLVM njenge-backend, imisebenzi yokuguqula uhlobo yenziwa ngemiyalo yekhodi ephakathi ye-LLVM njenge fptoui, ezinesici esisodwa esibalulekile - ukuziphatha okungachazwanga uma inani eliwumphumela lingangeni ohlotsheni oluqondiwe. Isibonelo, lapho uguqula inani le-float engu-300 ngohlobo lwe-f32 ukuze lube uhlobo oluphelele u8, umphumela awubikezeli futhi ungase uhluke kumasistimu ahlukene. Inkinga ukuthi lesi sici sivela kukhodi engaphawulwanga ngokuthi “ayiphephile”.

    Kusukela ku-Rust 1.45, ukuziphatha kosayizi wokuchichima kohlobo kulawulwa ngokuqinile, futhi umsebenzi wokuguqulwa "njengoba" uhlola ukuchichima futhi uphoqa inani ukuthi liguqulwe libe inani eliphakeme noma eliphansi lohlobo oluqondiwe (ngokwesibonelo esingenhla, inani 300 izoguqulelwa ku-255). Ukuze ukhubaze ukuhlola okunjalo, amakholi e-API engeziwe “{f64, f32}::to_int_unchecked” anikezwa, asebenza ngemodi engaphephile.

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

    i-fnmain() {
    let too_big = 300.0;
    let too_small = -100.0;
    vumela nan = f32::NAN;

    vumela x: f32 = 1.0;
    vumela y: u8 = akuphephile {x.to_int_unchecked()};

    println!("too_big_casted = {}", cast(too_big)); // okukhiphayo 255
    println!("too_small_casted = {}", cast(kakhulu_kancane)); // okukhiphayo 0
    println!("not_a_number_casted = {}", cast(nan)); // okukhiphayo 0
    }

  • Sebenzisa uzinzile amamakhro enquboizinkulumo ezifana nomsebenzi, izifanekiso, nezitatimende. Ngaphambilini, ama-macros anjalo awakwazanga ukubizwa yonke indawo, kodwa kuphela ezingxenyeni ezithile zekhodi (njengocingo oluhlukile, olungahlangene namanye amakhodi). Ukwandisa indlela ama-macros angabizwa ngayo, afana nemisebenzi, bekungenye yezidingo zokwenza uhlaka lwewebhu lusebenze. rocket ekukhishweni okuzinzile kwe-Rust. Ngaphambilini, ukuzuza ukuguquguquka okwengeziwe ekuchazeni izibambi ku-Rocket kwakudingeka ukunika amandla isici sokuhlola esibizwa ngokuthi “proc_macro_hygiene”, esingatholakali kuzinguqulo ezizinzile ze-Rust. Lokhu kusebenza manje kwakhelwe ekukhishweni okuzinzile kolimi.
  • Kuvunyelwe ukusebenzisa ububanzi obunohlobo oluthi “char” ukuze kuphindwe kumanani obubanzi (ama-ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    kwe-ch in ‘a’..=’z’ {
    phrinta!("{}", ch);
    }
    phrinta!(); // Izophrinta "abcdefghijklmnopqrstuvwxyz"

  • Ingxenye entsha yama-API idluliselwe esigabeni esizinzile, okuhlanganisa nokuzinza
    I-Arc::as_ptr,
    I-BTreeMap::susa_ukungena,
    Rc::as_ptr,
    rc::Buthaka::as_ptr,
    rc::Buthaka::kusuka_kuluhlaza,
    rc::Buthaka::okungavuthiwe,
    str::strip_prefix,
    str::strip_suffix,
    ukuvumelanisa::Buthaka::njengoba_ptr,
    ukuvumelanisa::Buthaka::kusuka_kuluhlaza,
    ukuvumelanisa::Buthaka::okungahluziwe,
    char::UNICODE_VERSION,
    Isikhathi::kuxazululiwe_ku,
    Isikhathi::kukhona_ku,
    Isikhathi::isayithi_elixubile,
    unix::process::CommandExt::arg0.

  • I-rustc compiler yengeze usekelo lokweqa izici zeplathifomu eziqondiwe ezihlukahlukene kusetshenziswa ifulege "lesici esiqondiwe", isibonelo, "-C target-feature=+avx2+fma". Amafulegi amasha nawo engeziwe:
    "phoqelela ukuqaqa-amathebula" ukuze kukhiqizwe amathebula okushaya ucingo, kungakhathaliseki isu lokusingatha ukuphahlazeka; "shumeka-bitcode" ukuze ulawule ukuthi i-bitcode ye-LLVM ifakiwe yini kuma-rlibs akhiqiziwe. Ifulegi elithi "shumeka-bitcode" linikwe amandla ngokuzenzakalela ku-Cargo ukuze kulungiselelwe isikhathi sokwakha nokusetshenziswa kwesikhala sediski.

  • Izinga lesithathu losekelo linikelwe izinkundla ze-mipsel-sony-psp kanye ne-thumbv7a-uwp-windows-msvc. Izinga lesithathu libandakanya ukwesekwa okuyisisekelo, kodwa ngaphandle kokuhlola okuzenzakalelayo nokushicilelwa kwezakhiwo ezisemthethweni.

Ukwengeza, kungaphawulwa indaba mayelana nokudala okulula kakhulu izicelo ngolimi lwe-Rust, uqala ukusebenzisa i-bootloader yesistimu futhi ulungele ukuzilayisha ngokwakho esikhundleni sesistimu yokusebenza.
I-athikili ingeyokuqala ochungechungeni olunikezelwe ekuboniseni amasu adingeka ezinhlelweni ezisezingeni eliphansi kanye nokuthuthukiswa kwe-OS.

Source: opennet.ru

Engeza amazwana