Rust 1.64 programavimo kalbos leidimas

Paskelbtas „Mozilla“ projekto įkurtos, bet dabar globojamos nepriklausomos ne pelno organizacijos „Rust Foundation“ bendrosios paskirties programavimo kalbos „Rust 1.64“ leidimas. Kalba daugiausia dėmesio skiria atminties saugai ir suteikia galimybę pasiekti aukštą darbo lygiagretumą, vengiant šiukšlių rinktuvo ir vykdymo laiko (vykdymo laikas sumažinamas iki pagrindinės standartinės bibliotekos inicijavimo ir priežiūros).

„Rust“ atminties apdorojimo metodai apsaugo kūrėją nuo klaidų manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties tvarkymo, pvz., prieiga prie atminties srities ją atlaisvinus, nulinių rodyklių panaikinimas, buferio viršijimas ir kt. Siekiant platinti bibliotekas, teikti kūrimo ir valdyti priklausomybes, projektas sukuria krovinių paketų tvarkyklę. Crates.io saugykla palaikoma bibliotekų prieglobai.

Atminties sauga „Rust“ užtikrinama kompiliavimo metu, tikrinant nuorodas, stebint objekto nuosavybę, stebint objektų gyvavimo trukmę (apimtį) ir įvertinant prieigos prie atminties teisingumą vykdant kodą. Rust taip pat suteikia apsaugą nuo sveikųjų skaičių perpildymo, reikalauja, kad kintamieji būtų inicijuojami prieš naudojant, geriau tvarko klaidas standartinėje bibliotekoje, pagal numatytuosius nustatymus taiko nekintamų nuorodų ir kintamųjų koncepciją ir siūlo tvirtą statinį rašymą, kad būtų sumažintos loginės klaidos.

Pagrindinės naujovės:

  • Padidinti reikalavimai Linux aplinkai kompiliatoriuje, Cargo paketų tvarkyklėje ir libstd standartinėje bibliotekoje – minimalūs reikalavimai Glibc pakelti nuo 2.11 versijos iki 2.17, o Linux branduoliui iš 2.6.32 versijos į 3.2. Apribojimai taip pat taikomi Rust programos vykdomiesiems failams, sukurtiems naudojant libstd. Platinimo rinkiniai RHEL 7, SLES 12-SP5, Debian 8 ir Ubuntu 14.04 atitinka naujus reikalavimus. RHEL 6, SLES 11-SP4, Debian 7 ir Ubuntu 12.04 palaikymas bus nutrauktas. Vartotojai, naudojantys „Rust-built“ vykdomuosius failus aplinkoje su senesniu „Linux“ branduoliu, raginami atnaujinti savo sistemas, naudoti senesnius kompiliatoriaus leidimus arba išlaikyti savo libstd šakutę su sluoksniais, kad išlaikytų suderinamumą.

    Viena iš priežasčių, dėl kurių nutraukiamas senesnių Linux sistemų palaikymas, yra riboti ištekliai, skirti toliau išlaikyti suderinamumą su senesnėmis aplinkomis. Norint palaikyti seną Glibc, reikia naudoti senus įrankius tikrinant nuolatinės integracijos sistemoje, atsižvelgiant į didėjančius versijos reikalavimus LLVM ir kryžminio kompiliavimo paslaugų programose. Branduolio versijos reikalavimų padidėjimas atsirado dėl galimybės naudoti naujus sistemos iškvietimus libstd, nereikalaujant išlaikyti sluoksnių, kad būtų užtikrintas suderinamumas su senesniais branduoliais.

  • IntoFuture bruožas buvo stabilizuotas, kuris panašus į IntoIterator, bet skiriasi nuo pastarojo tuo, kad vietoj "for ... in ..." kilpos naudojamas ".await". Sujungus su „IntoFuture“, raktinis žodis „.laukti“ gali tikėtis ne tik ateities bruožo, bet ir bet kokių kitų tipų, kuriuos galima konvertuoti į ateitį.
  • Rūdžių analizatoriaus įrankis yra įtrauktas į paslaugų rinkinį, pateikiamą kartu su Rust leidimais. Priemonę taip pat galima įdiegti naudojant „rustup“ (rustup komponentas „add rust-analyzer“).
  • „Cargo“ paketų tvarkytuvė apima darbo srities paveldėjimą, kad būtų išvengta įprastų laukų reikšmių dubliavimo tarp paketų, pvz., „Rust“ versijų ir saugyklų URL. Taip pat pridėtas kelių tikslinių platformų kūrimo palaikymas vienu metu (dabar parinktyje „--target“ galite nurodyti daugiau nei vieną parametrą).
  • Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
    • ateitis::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • skaičius::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_ext_power_of_wo
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Su C suderinami tipai, anksčiau stabilizuoti std::ffi modulyje, buvo įtraukti į pagrindinę ir aloc biblioteką:
    • branduolys::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • C tipai, anksčiau stabilizuoti std::os::raw modulyje, buvo įtraukti į pagrindinius::ffi ir std::ffi modulius (pavyzdžiui, c_uint ir c_ulong tipai buvo pasiūlyti uint ir ulong C tipams):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Žemo lygio tvarkyklės buvo stabilizuotos naudoti su Poll mechanizmu (ateityje planuojama pateikti supaprastintą API, kuriai nereikia naudoti žemo lygio struktūrų, tokių kaip Pull and Pin):

    • ateitis::poll_fn
    • užduotis::paruošta!
  • Atributas „const“, kuris nustato galimybę jį naudoti bet kuriame kontekste vietoj konstantų, naudojamas funkcijoje slice::from_raw_parts.
  • Siekiant kompaktiškiau saugoti duomenis, pakeistas Ipv4Addr, Ipv6Addr, SocketAddrV4 ir SocketAddrV6 struktūrų atminties išdėstymas. Gali kilti suderinamumo problema su vienos dėžės paketais, kurie naudoja std::mem::transmute žemo lygio struktūrų valdymui.
  • „Windows“ platformos rūdžių kompiliatoriaus kūrimas naudoja PGO optimizavimą (profilio optimizavimą), kuris leido padidinti kodo kompiliavimo našumą 10–20%.
  • Kompiliatorius įdiegė naują įspėjimą apie nenaudojamus laukus tam tikrose struktūrose.

Be to, galite atkreipti dėmesį į būsenos ataskaitą apie alternatyvaus Rust kalbos kompiliatoriaus diegimo kūrimą, parengtą gccrs projekto (GCC Rust) ir patvirtintą įtraukti į GCC. Integravus sąsają, standartinius GCC įrankius galima naudoti programoms kompiliuoti Rust kalba, nereikia įdiegti rustc kompiliatoriaus, sukurto naudojant LLVM plėtrą. Tol, kol plėtra vyksta, ir, išskyrus nenumatytas problemas, „Rust“ sąsaja bus integruota į GCC 13 leidimą, kuris numatytas kitų metų gegužę. GCC 13 „Rust“ diegimas bus beta versijos būsenoje, dar neįjungtas pagal numatytuosius nustatymus.

Šaltinis: opennet.ru

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