Rust 1.40 Programming Language Release

publisearre systeem programmeartaal release Roest 1.40, oprjochte troch it Mozilla-projekt. De taal rjochtet him op ûnthâldfeiligens, leveret automatysk ûnthâldbehear, en leveret ark foar it realisearjen fan hege taakparallellisme sûnder in garbage collector en runtime.

Rust's automatyske ûnthâldbehear befrijt de ûntwikkelder fan oanwizermanipulaasje en beskermet tsjin problemen dy't ûntsteane út leechnivo-ûnthâldmanipulaasje, lykas nei-frije ûnthâldtagongen, nul-oanwizer-ferwizings, buffer-oerrin, en sa. In pakketbehearder wurdt ûntwikkele om bibleteken te fersprieden, assemblage te garandearjen en ôfhinklikens te behearjen troch it projekt. Lading, wêrtroch jo de biblioteken dy't nedich binne foar it programma yn ien klik krije. In repository wurdt stipe om bibleteken te hostjen crates.io.

haad ynnovaasjes:

  • Tafoege de mooglikheid om struktueren (struct) en enumeraasjes te markearjen (enum mei Variant-blok) mei it attribút "#[net_útputtend]", dy't stiet ta yn 'e takomst, tafoegje nije fjilden en opsjes oan ferklearre struktueren en enumerations. Bygelyks, ûntwikkelders fan modules dy't struktueren hawwe mei iepenbier ferklearre fjilden kinne "#[non_exhaustive]" brûke om struktueren te markearjen dy't mooglik nije fjilden tafoege hawwe yn 'e takomst. Oant no ta, yn sa'n situaasje, waard de ûntwikkelder twongen om te kiezen tusken fjilden privee te ferklearjen en te binen oan in ûnferoarlike list fan fjilden. It nije attribút ferwideret dizze beheining en lit jo nije fjilden tafoegje yn 'e takomst sûnder it risiko dat earder kompilearre eksterne koade brekke. Yn kratpakketten, by it oerienkommen fan opsjes yn 'e seksje "oerienkomst", is in eksplisite definysje fan it masker "_ => {...}" fereaske, dy't mooglike takomstige fjilden dekt, oars sil in flater werjûn wurde by it tafoegjen fan nije fjilden.
  • Added de mooglikheid om te neamen de prosedurele makro mac!() yn in type kontekst. Bygelyks, kinne jo no skriuwe "type Foo = expand_to_type! (bar);" as "expand_to_type" is in prosedurele makro.
  • Yn "eksterne { ... }" blokken tafoege de mooglikheid om proseduere- en attribútmakro's te brûken, ynklusyf "bang!()"-makro's, bygelyks:

    makro_regels! make_item { ($name:ident) => { fn $name(); } }

    ekstern {
    meitsje_item!(alfa);
    make_item!(beta);
    }

    ekstern "C" {
    #[my_identity_macro] fn foo();
    }

  • Yn makro's útfierd mooglikheid om "macro_rules!"-eleminten te generearjen. Generearje "macro_rules!" mooglik sawol yn funksje-like makro's ("mac!()") en yn makro's yn 'e foarm fan attributen ("#[mac]").
  • Yn it $m:meta mapping elemint tafoege stipe foar willekeurige token-enumeraasjewearden ("[TOKEN_STREAM]", "{TOKEN_STREAM}" en "(TOKEN_STREAM)"), bygelyks:

    makro_regels! accept_meta {($m:meta) => {} }
    accept_meta!(myn::paad);
    accept_meta!(my::path = "lit");
    accept_meta!(my::path (abc));
    accept_meta!(myn::paad [abc]);
    accept_meta!(my::path {abc});

  • Yn Rust 2015 modus is flater útfier ynskeakele foar problemen identifisearre by it kontrolearjen fan it lien fan fariabelen (borrow checker) mei help fan de NLL (Non-Lexical Lifetimes) technyk. Earder waarden warskôgingen ferfongen troch flaters by it rinnen yn Rust 2018-modus.
    Nei't de feroaring waard útwreide nei de Rust 2015-modus, koenen ûntwikkelders einlings ferwiderje fan de âlde liene checker.

    Lit ús ûnthâlde dat it ferifikaasjesysteem basearre op in nij meganisme foar it rekkenjen fan it libben fan liende fariabelen it mooglik makke om guon problemen te identifisearjen dy't ûngemurken gongen troch de âlde ferifikaasjekoade. Sûnt flater útfier foar sokke kontrôles koe beynfloedzje komptabiliteit mei earder wurke koade, warskôgings waarden ynearsten útjûn ynstee fan flaters.

  • It attribút "const", dat de mooglikheid bepaalt om it yn elke kontekst te brûken ynstee fan konstanten, wurdt brûkt foar de funksje is_power_of_two (foar net-ûndertekene heule getallen).
  • In nij diel fan 'e API is ferpleatst nei de stabile kategory, ynklusyf de todo!() makro en de slice :: repeat, mem :: take, BTreeMap :: get_key_value, HashMap :: get_key_value, metoaden binne stabilisearre.
    Opsje::as_deref, Opsje ::as_deref_mut, Opsje ::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32} f64}::from_be_bytes, {f32,f64}::from_le_bytes, en {f32,f64}::from_ne_bytes.

  • Yn it pakket manager lading
    útfierd caching kompilator warskôgingen op skiif. De opsje "cargo metadata" tafoege oan it kommando "cargo metadata".--filter-platfoarm" om allinich pakketten sjen te litten bûn oan it opjûne doelplatfoarm yn 'e kolom foar ôfhinklikensresolúsje. Added http.ssl-version konfiguraasje opsje foar in definiearje jildige TLS ferzjes.
    De mooglikheid tafoege om de seksje te publisearjen "dev-ôfhinklikens" sûnder de "ferzje" kaai op te jaan.

  • De rustc-kompiler leveret tredde nivo-stipe foar doelplatfoarms thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 en mips64el-unknown-linux-muslabi64. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen en publikaasje fan offisjele builds.

Boarne: opennet.ru

Add a comment