Izdanje Rust programskog jezika 1.61

Objavljen je programski jezik opće namjene Rust 1.61, utemeljen na projektu Mozilla, ali sada razvijen pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe skupljača smeća i vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programere od pogrešaka pri manipuliranju pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskoj razini, kao što je pristup memorijskom području nakon što je ono oslobođeno, dereferenciranje nultih pokazivača, prekoračenje međuspremnika, itd. Za distribuciju biblioteka, pružanje nadogradnji i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Sigurnost memorije osigurana je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta, praćenjem životnih vijekova objekta (opsega) i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje pogreške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli prema zadanim postavkama, nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.

Glavne inovacije:

  • Moguće je definirati vlastite povratne kodove iz glavne funkcije. Izvorno, Rustova glavna funkcija mogla je vratiti samo tip "()" (jedinica), koji je uvijek označavao uspješan izlazni status osim ako programer nije eksplicitno pozvao funkciju "process::exit(code)". U Rustu 1.26, korištenjem značajke nestabilnog završetka u glavnoj funkciji, bilo je moguće vratiti vrijednosti "Ok" i "Err", koje odgovaraju kodovima EXIT_SUCCESS i EXIT_FAILURE u C programima. U Rustu 1.61 značajka Termination je učinjena stabilnom, a predložena je zasebna vrsta ExitCode za predstavljanje specifičnog povratnog koda, koji apstrahira tipove povrata specifične za platformu pružajući unaprijed definirane konstante SUCCESS i FAILURE i metodu From vratiti proizvoljan povratni kod. koristiti std::process::ExitCode; fn main() -> IzlazniKod { if !check_foo() { return IzlazniKod::from(8); } ExitCode::SUCCESS }
  • Stabilizirane su dodatne mogućnosti funkcija definiranih pomoću izraza "const fn", koje se mogu nazvati ne samo redovnim funkcijama, već se mogu koristiti u bilo kojem kontekstu umjesto konstanti. Ove se funkcije izračunavaju u vrijeme prevođenja, a ne u vrijeme izvođenja, pa su podložne određenim ograničenjima, kao što je mogućnost čitanja samo iz konstanti. U novoj verziji dopuštene su osnovne operacije s pokazivačima na funkcije unutar const funkcija (dopušteno je kreiranje, prosljeđivanje i ubacivanje pokazivača, ali ne i pozivanje funkcije pomoću pokazivača); granice osobina za generičke parametre funkcija const kao što su T: Kopiraj; dinamički dispatchable svojstva (dyn Trait); impl Vrste svojstava za argumente funkcije i povratne vrijednosti.
  • Tok obrađuje Stdin, Stdout i Stderr u std::io sada ima statički životni vijek ("static") kada je zaključan, dopuštajući konstrukcije poput "let out = std::io::stdout().lock();" s dobivanjem kvake i postavljanjem brave u jednom izrazu.
  • Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika koje su stabilizirane:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Pišite za kursor
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Raskid
    • std::thread::JoinHandle::is_finished
  • Atribut "const", koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se u funkcijama:
    • ::offset i ::offset
    • ::wrapping_offset i ::wrapping_offset
    • ::add i ::add
    • ::sub i ::sub
    • ::wrapping_add i ::wrapping_add
    • ::wrapping_sub i ::wrapping_sub
    • ::as_mut_ptr
    • ::as_ptr_range
    • ::as_mut_ptr_range

Dodatno, možete primijetiti članak “Rust: kritična retrospektiva” sa sažetkom dojmova o Rust jeziku nakon što ste u njega napisali 100 tisuća redaka koda tijekom razvoja operativnog sustava Xous microkernel koji se koristi u firmware-u. Nedostaci uključuju teško razumljivu sintaksu, nedovršenost i kontinuirani razvoj jezika, nedostatak ponovljivih verzija, tipične probleme s povjerenjem ovisnosti u Crates.io i potrebu za održavanjem određene discipline za pisanje sigurnog koda. Značajke koje su nadmašile očekivanja uključuju alate za refaktoriranje koda i preradu "hakova" dodanih tijekom brze izrade prototipova.

Izvor: opennet.ru

Dodajte komentar