Rust 1.40 programavimo kalbos leidimas

paskelbta sistemos programavimo kalbos leidimas Rūdys 1.40, įkurta Mozilla projekto. Kalba skirta atminties saugai, suteikia automatinį atminties valdymą ir suteikia įrankius, leidžiančius pasiekti aukštą užduočių lygiagretumą nenaudojant šiukšlių rinktuvo ir Runtime.

„Rust“ automatinis atminties valdymas išlaisvina kūrėją nuo manipuliavimo žymekliu ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties manipuliavimo, pvz., laisvos atminties prieigos, nulinių rodyklės nuorodų, buferio viršijimo ir panašiai. Kuriama paketų tvarkyklė, skirta platinti bibliotekas, užtikrinti surinkimą ir valdyti projekto priklausomybes. krovinys, leidžiančiu vienu paspaudimu gauti programai reikalingas bibliotekas. Saugykla palaikoma prieglobos bibliotekoms dėžės.io.

pagrindinis naujoves:

  • Pridėta galimybė pažymėti struktūras (struct) ir sąrašus (enum su Variant bloku) naudojant atributą "#[nebaigtinis]“, kuris leidžia ateityje į deklaruotas struktūras ir sąrašus įtraukite naujų laukų ir parinkčių. Pavyzdžiui, modulių, turinčių struktūras su viešai deklaruotais laukais, kūrėjai gali naudoti „#[non_exhaustive]“, norėdami pažymėti struktūras, kurios ateityje gali turėti naujų laukų. Iki šiol šioje situacijoje kūrėjas buvo priverstas rinktis tarp laukų deklaravimo privačiai ir susiejimo su nekintamu laukų sąrašu. Naujasis atributas pašalina šį apribojimą ir leidžia ateityje pridėti naujų laukų, nerizikuojant sugadinti anksčiau sudarytą išorinį kodą. Dėžės paketuose, derinant parinktis skiltyje „match“, reikalingas aiškus kaukės „_ => {...}“ apibrėžimas, apimantis galimus būsimus laukus, kitaip pridedant naujus laukus bus rodoma klaida.
  • Pridėta galimybė iškviesti procedūrinę makrokomandą mac!() tipo kontekste. Pavyzdžiui, dabar galite parašyti „type Foo = expand_to_type!(bar);“, jei „išplėsti_į_tipą“ yra procedūrinė makrokomanda.
  • „Extern { ... }“ blokuose pridėta galimybė naudoti procedūrines ir atributų makrokomandas, įskaitant „bang!()“ makrokomandas, pavyzdžiui:

    makro_taisyklės! make_item { ($vardas:ident) => { fn $vardas(); } }

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

    išorinis "C" {
    #[my_identity_macro] fn foo ();
    }

  • Makrokomandose įgyvendinta galimybė generuoti „macro_rules!“ elementus. Generuojama "makro_taisyklės!" galimos tiek į funkcijas panašiose makrokomandose („mac!()“), tiek makrokomandose atributų pavidalu („#[mac]“).
  • $m:meta atvaizdavimo elemente pridėta savavališkų prieigos raktų sąrašo verčių palaikymas („[TOKEN_STREAM]“, „{TOKEN_STREAM}“ ir „(TOKEN_STREAM)“), pvz.:

    makro_taisyklės! accept_meta { ($m:meta) => {} }
    priimti_meta!( mano::kelias );
    priimti_meta!( my::path = "šviesta" );
    priimti_meta!( mano::kelias ( a b c ) );
    priimti_meta!( mano::kelias [ a b c ] );
    priimti_meta!( mano::kelias { a b c } );

  • „Rust 2015“ režimu įgalinamas klaidų išvestis, kai nustatomos problemos, kai tikrinamas kintamųjų skolinimasis (paskolos tikrintuvas) naudojant NLL (neleksinio gyvenimo trukmės) techniką. Anksčiau įspėjimai buvo pakeisti klaidomis veikiant Rust 2018 režimu.
    Po to, kai pakeitimas buvo išplėstas iki „Rust 2015“ režimo, kūrėjai pagaliau galėjo tai padaryti atsikratyti iš seno skolinimosi tikrintuvo.

    Prisiminkime, kad patikros sistema, pagrįsta nauju mechanizmu, pagal kurį atsižvelgiama į pasiskolintų kintamųjų trukmę, leido nustatyti kai kurias problemas, kurių nepastebėjo senasis patvirtinimo kodas. Kadangi klaidų išvestis atliekant tokius patikrinimus gali turėti įtakos suderinamumui su anksčiau veikiančiu kodu, iš pradžių vietoj klaidų buvo pateikti įspėjimai.

  • Atributas „const“, kuris nustato galimybę jį naudoti bet kuriame kontekste, o ne konstantose, naudojamas funkcijai is_power_of_wo (nežymiems sveikiesiems skaičiams).
  • Nauja API dalis buvo perkelta į stabilią kategoriją, įskaitant makrokomandą todo!() ir slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metodai buvo stabilizuoti.
    Parinktis::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_32, {f64ne_32, f64}::from_be_bytes, {f32,f64}::from_le_bytes ir {fXNUMX,fXNUMX}::from_ne_bytes.

  • Pakuotės tvarkyklės krovinyje
    įgyvendinta talpyklos kompiliatoriaus įspėjimai diske. Prie komandos „krovinio metaduomenys“ pridėta parinktis „krovinio metaduomenys“.--filtro platforma“, kad priklausomybės sprendimo stulpelyje būtų rodomi tik paketai, susieti su nurodyta tiksline platforma. Pridėta http.ssl-version konfigūracijos parinktis, skirta nustatyti galiojančias TLS versijas.
    Pridėta galimybė skelbti skyrių "dev-priklausomybės“, nenurodant rakto „versija“.

  • Rustc kompiliatorius teikia trečiojo lygio palaikymą tikslinėms platformoms thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 ir mips64el-unknown-linux-muslabi64. Trečiasis lygis apima pagrindinį palaikymą, bet be automatinio testavimo ir oficialių versijų paskelbimo.

Šaltinis: opennet.ru

Добавить комментарий