Rust 1.40 Rilaxx tal-Lingwa ta' Programmazzjoni

ippubblikat rilaxx tal-lingwa tal-ipprogrammar tas-sistema Sadid 1.40, imwaqqfa mill-proġett Mozilla. Il-lingwa tiffoka fuq is-sikurezza tal-memorja, tipprovdi ġestjoni awtomatika tal-memorja, u tipprovdi għodod biex jinkiseb paralleliżmu għoli tal-kompiti mingħajr ma tuża kollettur taż-żibel u runtime.

Il-ġestjoni awtomatika tal-memorja tas-sadid teħles lill-iżviluppatur mill-manipulazzjoni tal-pointer u tipproteġi kontra problemi li jirriżultaw minn manipulazzjoni tal-memorja ta 'livell baxx, bħal aċċessi għall-memorja wara ħielsa, dereferences null tal-pointer, buffer overruns, u affarijiet simili. Qed jiġi żviluppat maniġer tal-pakketti biex iqassam il-libreriji, jiżgura l-assemblaġġ u jamministra d-dipendenzi mill-proġett. merkanzija, li jippermettilek tikseb il-libreriji meħtieġa għall-programm fi klikk waħda. Repożitorju huwa appoġġjat biex jospita libreriji crates.io.

Il-prinċipali innovazzjonijiet:

  • Żid il-ħila li timmarka strutturi (struct) u enumerazzjonijiet (enum bi Blokk tal-Varjanti) bl-użu tal-attribut "#[non_exhaustive]", li tippermetti fil-futur, żid oqsma u għażliet ġodda għal strutturi u enumerazzjonijiet iddikjarati. Pereżempju, l-iżviluppaturi ta' moduli li għandhom strutturi b'oqsma ddikjarati pubblikament jistgħu jużaw "#[non_exhaustive]" biex jimmarkaw strutturi li jista' jkollhom oqsma ġodda miżjuda fil-futur. Sa issa, f'din is-sitwazzjoni, l-iżviluppatur kien imġiegħel jagħżel bejn tiddikjara l-oqsma privatament u jorbot ma 'lista immutabbli ta' oqsma. L-attribut il-ġdid ineħħi din il-limitazzjoni u jippermettilek li żżid oqsma ġodda fil-futur mingħajr ir-riskju li tkisser il-kodiċi estern ikkumpilat qabel. F'pakketti taċ-ċestun, meta tqabbel l-għażliet fit-taqsima "taqbil", hija meħtieġa definizzjoni espliċita tal-maskra "_ => {...}", li tkopri oqsma futuri possibbli, inkella se jintwera żball meta żżid oqsma ġodda.
  • Miżjud l-abbiltà li ssejjaħ il-makro proċedurali mac!() f'kuntest tat-tip. Pereżempju, issa tista 'tikteb "type Foo = expand_to_type!(bar);" jekk "expand_to_type" hija makro proċedurali.
  • Fi blokki "estern { ... }". miżjud l-abbiltà li tuża macros proċedurali u ta' attribut, inklużi macros "bang!()", pereżempju:

    makro_regoli! make_item { ($isem:ident) => { fn $isem (); } }

    estern {
    make_item!(alpha);
    make_item!(beta);
    }

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

  • Fil macros implimentati abbiltà li tiġġenera elementi "macro_rules!". Tiġġenera "macro_rules!" possibbli kemm f'makros li jixbħu l-funzjoni (“mac!()”) kif ukoll f'makros fil-forma ta' attributi (“#[mac]”).
  • Fl-element tal-mapping $m:meta miżjud appoġġ għal valuri ta' enumerazzjoni ta' tokens arbitrarji ("[TOKEN_STREAM]", "{TOKEN_STREAM}" u "(TOKEN_STREAM)"), pereżempju:

    makro_regoli! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( a b c ) );
    accept_meta!( my::path [ a b c ] );
    accept_meta!( my::path { a b c } );

  • Fil-modalità Rust 2015, l-output ta 'żbalji huwa attivat għal problemi identifikati meta jiġi ċċekkjat is-self ta' varjabbli (kontrollur tas-self) bl-użu tat-teknika NLL (Ħajja mhux Lessiċi). Preċedentement, it-twissijiet ġew sostitwiti bi żbalji meta taħdem fil-modalità Rust 2018.
    Wara li l-bidla ġiet estiża għall-modalità Rust 2015, l-iżviluppaturi setgħu finalment jeħles mill-kontrollur tas-self l-antik.

    Ejja nfakkru li s-sistema ta' verifika bbażata fuq mekkaniżmu ġdid biex jittieħed kont tal-ħajja ta' varjabbli mislufa għamlitha possibbli li jiġu identifikati xi problemi li ma kinux innutati mill-kodiċi ta' verifika l-antik. Peress li l-output ta' żball għal tali verifiki jista' jaffettwa l-kompatibilità mal-kodiċi li kien jaħdem qabel, inizjalment inħarġu twissijiet minflok żbalji.

  • L-attribut "const", li jiddetermina l-possibbiltà li jintuża fi kwalunkwe kuntest minflok kostanti, jintuża għall-funzjoni is_power_of_two (għal interi mhux iffirmati).
  • Porzjon ġdid tal-API ġie mċaqlaq għall-kategorija stabbli, inkluż il-makro todo!() u l-metodi slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, ġew stabbilizzati.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32,f64} f32}::from_be_bytes, {f64,f32}::from_le_bytes, u {f64,fXNUMX}::from_ne_bytes.

  • Fil-merkanzija tal-maniġer tal-pakkett
    implimentati caching twissijiet tal-kompilatur fuq disk. Żid l-għażla "metadata tal-merkanzija" mal-kmand "metadata tal-merkanzija".--filtru-pjattaforma" biex turi biss pakketti marbuta mal-pjattaforma fil-mira speċifikata fil-kolonna tar-riżoluzzjoni tad-dipendenza. Miżjud għażla ta' konfigurazzjoni http.ssl-version biex tiddefinixxi verżjonijiet TLS validi.
    Żid il-ħila li tippubblika t-taqsima "dev-dipendenzi" mingħajr ma tispeċifika ċ-ċavetta "verżjoni".

  • Il-kompilatur rustc jipprovdi appoġġ tat-tielet livell għall-pjattaformi fil-mira thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 u mips64el-unknown-linux-muslabi64. It-tielet livell jinvolvi appoġġ bażiku, iżda mingħajr ittestjar awtomatizzat u pubblikazzjoni ta 'bini uffiċjali.

Sors: opennet.ru

Żid kumment