Programski jezik Rust 1.61 izdanje

Objavljeno je izdanje Rust 1.61 programskog jezika opšte namjene, koji je osnovan od strane Mozilla projekta, a koji je sada razvijen pod okriljem nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe sakupljača smeća i vremena izvođenja (vrijeme izvođenja je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programera od grešaka prilikom manipulacije pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskom nivou, kao što je pristup memorijskoj oblasti nakon što je ona oslobođena, dereferenciranje nultih pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, izradu i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.

Sigurnost memorije je osigurana u Rustu u vrijeme kompajliranja kroz provjeru referenci, praćenje vlasništva nad objektom, praćenje životnog vijeka objekata (opsega) i procjenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.

Glavne inovacije:

  • Moguće je definirati vlastite povratne kodove iz glavne funkcije. Prvobitno, Rust-ova glavna funkcija mogla je vratiti samo tip "()" (jedinica), koji je uvijek ukazivao na uspješan izlazni status osim ako programer nije eksplicitno pozvao funkciju "process::exit(code)". U Rustu 1.26, korištenjem nestabilne karakteristike Termination 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, karakteristika Termination je stabilna, a poseban tip ExitCode je predložen da predstavlja specifični povratni kod, koji apstrahuje povratne tipove specifične za platformu obezbeđujući i unapred definisane konstante SUCCESS i FAILURE, i From metodu za vraćanje proizvoljnog povratnog koda. koristite std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Izlazni kod::USPJEH }
  • Stabilizirane su dodatne mogućnosti funkcija definiranih izrazom “const fn”, koje se mogu zvati ne samo kao regularne funkcije, već i koristiti u bilo kojem kontekstu umjesto konstantama. Ove funkcije se izračunavaju u vrijeme kompajliranja, a ne u vrijeme izvođenja, tako da podliježu određenim ograničenjima, kao što je mogućnost čitanja samo iz konstanti. U novoj verziji, dozvoljene su osnovne operacije sa pokazivačima funkcija unutar const funkcija (dozvoljeno je kreiranje, prosljeđivanje i pretvaranje pokazivača, ali ne i pozivanje funkcije po pokazivaču); granice osobina za generičke parametre konst funkcija kao što su T: Copy; dinamički dispečebilne osobine (dyn Trait); impl Tipovi svojstava za argumente funkcije i povratne vrijednosti.
  • Strim rukuje Stdin, Stdout i Stderr u std::io sada ima statički životni vijek (“statički”) kada je zaključan, dozvoljavajući konstrukcije poput “let out = std::io::stdout().lock();” sa dobijanjem ručke i postavljanjem brave u jednom izrazu.
  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Write for Cursor
    • std::os::unix::net::SocketAddr::od_pathname
    • std::process::ExitCode
    • std::process::Prekid
    • 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

Osim toga, možete primijetiti članak „Rust: kritična retrospektiva“ sa rezimeom utisaka o jeziku Rust nakon pisanja 100 hiljada linija koda u njemu tokom razvoja Xous mikrokernel operativnog sistema koji se koristi u firmveru. Nedostaci uključuju teško razumljivu sintaksu, nekompletnost i kontinuirani razvoj jezika, nedostatak ponovljivih build-ova, tipične probleme s povjerenjem ovisnosti u Crates.io i potrebu da se održi određena disciplina za pisanje sigurnog koda. Karakteristike koje su nadmašile očekivanja uključuju alate za refaktorisanje koda i preradu „hakova“ dodatih tokom brzog prototipa.

izvor: opennet.ru

Dodajte komentar