Rust 1.40 Programlingvo-Eldono

eldonita eldono de la sistemo de programlingvo Rusto 1.40, fondita de la projekto Mozilla. La lingvo temigas memorsekurecon, disponigas aŭtomatan memoradministradon, kaj disponigas ilojn por atingi altan taskan paralelecon sen uzado de rubkolektilo kaj rultempo.

La aŭtomata memoradministrado de Rust liberigas la ellaboranton de montrilo-manipulado kaj protektas kontraŭ problemoj ekestiĝantaj de malaltnivela memormanipulado, kiel ekzemple post-liberaj memoraliroj, nulaj montriloj dereferences, bufrotranspaso, kaj similaĵo. Pakaĵmanaĝero estas evoluigita por distribui bibliotekojn, certigi kunigon kaj administri dependecojn per la projekto. kargo, permesante al vi akiri la bibliotekojn necesajn por la programo per unu klako. Deponejo estas subtenata por gastigi bibliotekojn kestoj.io.

Ĉefa novigoj:

  • Aldonis la kapablon marki strukturojn (struct) kaj listojn (enum kun Variantbloko) uzante la atributon "#[ne_elĉerpa]", kiu permesas al estonte, aldonu novajn kampojn kaj opciojn al deklaritaj strukturoj kaj listoj. Ekzemple, programistoj de moduloj kiuj havas strukturojn kun publike deklaritaj kampoj povas uzi "#[non_exhaustive]" por marki strukturojn, kiuj eble estos aldonitaj novaj kampoj. Ĝis nun, en ĉi tiu situacio, la programisto estis devigita elekti inter deklari kampojn private kaj ligi al neŝanĝebla listo de kampoj. La nova atributo forigas ĉi tiun limigon kaj permesas vin aldoni novajn kampojn estonte sen risko rompi antaŭe kompilitan eksteran kodon. En kestaj pakoj, kiam kongruas opciojn en la sekcio "match", estas bezonata eksplicita difino de la masko "_ => {...}", kovrante eblajn estontajn kampojn, alie eraro montriĝos kiam oni aldonos novajn kampojn.
  • Aldonita la kapablo voki la proceduran makroon mac!() en tipa kunteksto. Ekzemple, vi nun povas skribi "tipo Foo = vast_to_type!(bar);" se "expand_to_type" estas procedura makroo.
  • En "eksteraj { ... }" blokoj aldonis la kapablo uzi procedurajn kaj atributajn makroojn, inkluzive de "bang!()" makrooj, ekzemple:

    makro_reguloj! make_item { ($nomo:ident) => { fn $nomo (); }}

    ekstera {
    fari_eron!(alfa);
    fari_iteron!(beta);
    }

    ekstera "C" {
    #[mia_identeco_makro] fn foo();
    }

  • En makrooj efektivigita kapablo generi "macro_rules!" elementojn. Generante "makro_regulojn!" ebla kaj en funkciosimilaj makrooj (“mac!()”) kaj en makrooj en formo de atributoj (“#[mac]”).
  • En la $m:meta-mapa elemento aldonis subteno por arbitraj tokenaj enumeraj valoroj ("[TOKEN_STREAM]", "{TOKEN_STREAM}" kaj "(TOKEN_STREAM)"), ekzemple:

    makro_reguloj! accept_meta { ($m:meta) => {} }
    akcepti_meta!( mia::vojo );
    akcepti_meta!( mia::vojo = "lumigita" );
    akcepti_meta!( mia::vojo ( abc ) );
    akceptu_meta!( mia::vojo [ abc ] );
    akceptu_meta!( mia::vojo { abc } );

  • En Rust 2015-reĝimo, erarproduktaĵo estas ebligita por problemoj identigitaj dum kontrolado de la prunto de variabloj (pruntkontrolilo) uzante la NLL (Ne-Leksikaj Vivdaŭroj) teknikon. Antaŭe, avertoj estis anstataŭigitaj per eraroj dum funkciado en Rust 2018-reĝimo.
    Post kiam la ŝanĝo estis etendita al la Rust 2015-reĝimo, programistoj povis finfine forigi de la malnova pruntkontrolilo.

    Ni rememoru, ke la kontrola sistemo bazita sur nova mekanismo por konsideri la vivdaŭron de pruntitaj variabloj ebligis identigi iujn problemojn, kiuj estis nerimarkitaj de la malnova kontrola kodo. Ĉar erarproduktaĵo por tiaj ĉekoj povus influi kongruecon kun antaŭe funkcianta kodo, avertoj estis komence eligitaj anstataŭe de eraroj.

  • La atributo "const", kiu determinas la eblecon uzi ĝin en iu ajn kunteksto anstataŭ konstantoj, estas uzata por la funkcio is_power_of_two (por sensignaj entjeroj).
  • Nova parto de la API estis movita al la stabila kategorio, inkluzive de la makroo todo!() kaj la slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metodoj estis stabiligitaj.
    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_bajtoj, {f32,::to_be_bajtoj, f64}::from_be_bytes, {f32,f64}::from_le_bytes, kaj {f32,f64}::from_ne_bytes.

  • En la pakaĵmanaĝero kargo
    efektivigita kaŝmemorigante kompililajn avertojn sur disko. Aldonis la opcion "metadatumoj de ŝarĝo" al la komando "metadatumoj de ŝarĝo".--filtrilo-platformo" por montri nur pakaĵojn ligitajn al la specifita celplatformo en la kolumno pri dependeca rezolucio. Aldonita http.ssl-versia agorda opcio por difini validajn TLS-versiojn.
    Aldonita la eblo publikigi la sekcion "dev-dependecoj" sen specifi la ŝlosilon "versio".

  • La rustc-kompililo disponigas trinivelan subtenon por celplatformoj thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 kaj mips64el-unknown-linux-muslabi64. La tria nivelo implikas bazan subtenon, sed sen aŭtomatigita testado kaj publikigo de oficialaj konstruoj.

fonto: opennet.ru

Aldoni komenton