Programski jezik Rust 1.44 izdanje

objavljeno izdanje sistemskog programskog jezika Rđa 1.44, osnovan od strane Mozilla projekta. Jezik se fokusira na sigurnost memorije, pruža automatsko upravljanje memorijom i pruža alate za postizanje visokog paralelizma zadataka bez korištenja sakupljača smeća i runtime.

Rustovo automatsko upravljanje memorijom eliminiše greške prilikom manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom na niskom nivou, kao što je pristup memorijskom regionu nakon što je on oslobođen, nulte reference pokazivača, prekoračenje bafera itd. Razvija se menadžer paketa za distribuciju biblioteka, osiguravanje sklapanja i upravljanje ovisnostima od strane projekta. teret, što vam omogućava da jednim klikom dobijete biblioteke potrebne za program. Podržano je spremište za hostiranje biblioteka crates.io.

U tekstu najave novog izdanja Rust programeri su se uključili u politiku i naglašeno odbili da objave pun pregled izmjena u Rust 1.44 u znak solidarnosti s demonstrantima protiv policijskog nasilja, ukazujući da je ovo pitanje važnije nego razmena tehničkog znanja. Basic inovacije:

  • Upravitelj paketa Cargo integrira naredbu “cargo tree” koja prikazuje graf ovisnosti nalik stablu. Dodata je i opcija “—duplikati” (“cargo tree -d”), koja vam omogućava da procijenite zavisnosti u različitim verzijama istog paketa.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── amonijak v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── log v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── markup5ever v0.9.0
    │ │ ├── log v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [zavisnosti izgradnje] │ │ │ └── version_check v0.1.5
    ...

  • Za aplikacije koje nisu vezane za std ("#![no_std]"), podrška za tehnike asinhronog programiranja implementirana je na osnovu funkcije "async", bloka async move { ... } i operatora ".await", koji pojednostaviti pisanje glavnog toka komandi rukovalaca koji ne blokiraju.
  • Podrška za proširivu šemu definicije hijerarhije modula je dodana u parser. Na primjer, sljedeća konstrukcija neće proizvesti grešku, uprkos stvarnom odsustvu modula "foo/bar/baz.rs" (konstrukcija je i dalje semantički nevažeća i može uzrokovati grešku, ali promjene se mogu vidjeti i raščlaniti na nivo makro i uslovne kompilacije):

    #[cfg(FALSE)] mod foo {
    mod bar {
    mod baz;
    }
    }

  • Rustc kompajler je dodao mogućnost upotrebe oznake “-C codegen-units” u inkrementalnom modu. Implementacija catch_unwind je prerađena tako da nema utjecaja na performanse ako je proces odmotavanja onemogućen i nisu izbačeni izuzeci.
  • Podrška nivoa 64 je obezbeđena za platforme aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos i x64_XNUMX-apple-tvos. Treći nivo uključuje osnovnu podršku, ali bez automatizovanog testiranja i objavljivanja zvaničnih verzija.
  • Novi dio API-ja prebačen je u stabilnu kategoriju, uključujući stabilizirane
    PathBuf::with_capacity,
    PathBuf::kapacitet,
    PathBuf::jasno,
    PathBuf::rezerva,
    PathBuf::reserve_exact,
    PathBuf::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    Layout::align_to,
    Layout::pad_to_align,
    Layout::array i
    Layout::extend.

  • Proširene funkcije standardne biblioteke:
    • Dodata posebna "vec![]" varijanta koja se direktno odražava u Vec::new(), dozvoljavajući da se "vec![]" koristi u kontekstu umjesto konstanti.
    • Implementacija (impl) osobine je dodana za konverziju::Infallible smjesa.
    • OsString implementira pametne pokazivače DerefMut и IndexMut, vraća "&mut OsStr".
    • Dodata podrška za Unicode 13.
    • Implementirano u String Od.
    • IoSlice implementira osobinu kopija.
    • Vec implementira From.
    • proc_macro::LexError implementira fmt::Display i Error.
  • Atribut “const”, koji određuje da li se može koristiti u bilo kojem kontekstu umjesto konstanti, koristi se u metodama from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes i to_ne_bytes za sve cjelobrojne tipove.
  • Dodata podrška za generisanje statičkih biblioteka u ".a" formatu umjesto ".lib" za GNU platforme na Windows-u.
  • Minimalni zahtjevi za LLVM su podignuti na LLVM verziju 8.

izvor: opennet.ru

Dodajte komentar