Rust 1.64 Programazio Lengoaia kaleratzea

Rust 1.64 erabilera orokorreko programazio-lengoaia argitaratu da, Mozilla proiektuak sortua, baina orain Rust Foundation irabazi asmorik gabeko erakunde independentearen babespean garatua. Lengoaiak memoriaren segurtasunean oinarritzen da eta lanaren paralelismo handia lortzeko bitartekoak eskaintzen ditu zabor-biltzailea eta exekuzio-denbora erabiltzea saihestuz (exekuzio-denbora liburutegi estandarraren hasierako oinarrizko hasierara eta mantentzera murrizten da).

Rust-en memoria maneiatzeko metodoek garatzaileari erakusleak manipulatzerakoan akatsetatik salbatzen dute eta maila baxuko memoria-kudeaketaren ondorioz sortzen diren arazoetatik babesten dute, hala nola, memoria-eremu batera atzitzea askatu ondoren, erakusle nuluak deserreferentziak egitea, buffer gainditzeak, etab. Liburutegiak banatzeko, eraikuntzak emateko eta mendekotasunak kudeatzeko, proiektuak Cargo paketeen kudeatzailea garatzen du. crates.io biltegia liburutegiak ostatatzeko onartzen da.

Memoriaren segurtasuna Rust-en konpilazio garaian eskaintzen da erreferentziak egiaztatzeko, objektuen jabetzaren jarraipena eginez, objektuen iraupenen (esparruak) jarraipena eginez eta kodearen exekuzioan memoria sarbidearen zuzentasuna ebaluatuz. Rust-ek osoko gainezkatzeen aurkako babesa eskaintzen du, erabili aurretik aldagaien balioak derrigorrezko hasieratzea eskatzen du, liburutegi estandarrean akatsak hobeto kudeatzen ditu, erreferentzia eta aldagai aldaezinen kontzeptua lehenespenez aplikatzen du, idazketa estatiko sendoa eskaintzen du akats logikoak minimizatzeko.

Berrikuntza nagusiak:

  • Konpilagailuan, Cargo paketeen kudeatzailean eta libstd liburutegi estandarrean Linux ingurunearen eskakizunak handitu dira - Glibc-en gutxieneko eskakizunak 2.11 bertsiotik 2.17ra igo dira eta Linux nukleoa 2.6.32 bertsiotik 3.2ra. Murrizketak libstd-ekin eraikitako Rust aplikazioaren exekutagarriei ere aplikatzen zaizkie. RHEL 7, SLES 12-SP5, Debian 8 eta Ubuntu 14.04 banaketa-kitek baldintza berriak betetzen dituzte. RHEL 6, SLES 11-SP4, Debian 7 eta Ubuntu 12.04 laguntza eten egingo da. Linux kernel zaharrago bat duten inguruneetan Rust-en eraikitako exekutagarriak erabiltzen dituzten erabiltzaileei sistemak berritzea gomendatzen zaie, konpilatzailearen bertsio zaharragoetan egon edo beren libstd fork propioa mantentzea geruzekin bateragarritasuna mantentzeko.

    Linux sistema zaharrentzako euskarria amaitzeko arrazoien artean ingurune zaharragoekin bateragarritasuna mantentzen jarraitzeko baliabide mugatuak daude. Oinarrizko Glibc-en euskarria integrazio-sistema jarraituan egiaztatzean ondare-tresnak erabiltzea eskatzen du, LLVM-en bertsio-eskakizunak gero eta handiagoak diren eta konpilazio gurutzatuen utilitateen aurrean. Nukleoaren bertsio-eskakizunen gehikuntza libstd-n sistema dei berriak erabiltzeko gaitasunari zor zaio geruzak mantendu beharrik gabe, nukleo zaharragoekin bateragarritasuna ziurtatzeko.

  • IntoFuture ezaugarria egonkortu egin da, IntoIterator-en antza duena, baina bigarrenarengandik desberdina den ".wait" erabiliz "for ... in ..." begiztak erabili beharrean. IntoFuture-rekin konbinatuta, ".await" gako-hitzak Etorkizuneko ezaugarri bat ez ezik, Etorkizun bihur daitekeen beste edozein mota ere espero dezake.
  • Rust-analyzer utilitatea Rust-en bertsioekin hornitutako utilitateen bilduman sartzen da. Erabilgarritasuna instalatzeko ere eskuragarri dago rustup erabiliz (rustup osagaia gehitu herdoil-analyzer).
  • Cargo paketeen kudeatzaileak lan-esparruaren herentzia barne hartzen du paketeen arteko eremu-balio arrunten bikoizketa ezabatzeko, hala nola Rust bertsioak eta biltegiko URLak. Hainbat helburu-plataforma aldi berean eraikitzeko laguntza ere gehitu da (orain parametro bat baino gehiago zehaztu dezakezu "--target" aukeran).
  • APIaren zati berri bat egonkorren kategoriara eraman da, eta ezaugarrien metodoak eta inplementazioak egonkortu dira:
    • etorkizuna::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::abs gainezka
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*:: wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::biren_hurrengo_potentzia egiaztatua
    • num::NonZeroU*::saturating_add
    • os::unix::prozesua::CommandExt::prozesu_taldea
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • C-bateragarriak diren motak, aurrez std::ffi moduluan egonkortuta, nukleoan eta alloc liburutegian gehitu dira:
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Aurretik std::os::raw moduluan egonkortutako C motak gehitu dira core::ffi eta std::ffi moduluetara (adibidez, c_uint eta c_ulong motak proposatu dira uint eta ulong C motetarako):
    • ffi::c_char
    • ffi::c_bikoitza
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_labur
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Maila baxuko kudeatzaileak egonkortu dira Poll mekanismoarekin erabiltzeko (etorkizunean Pull eta Pin bezalako behe-mailako egiturak erabili behar ez dituen API sinplifikatu bat ematea aurreikusten da):

    • etorkizuna::poll_fn
    • zeregina::prest!
  • "const" atributua, konstanteen ordez edozein testuingurutan erabiltzeko aukera zehazten duena, slice::from_raw_parts funtzioan erabiltzen da.
  • Datuak trinkoago gordetzeko, Ipv4Addr, Ipv6Addr, SocketAddrV4 eta SocketAddrV6 egituren memoria-diseinua aldatu da. Std::mem::transmute erabiltzen duten kaxa bakarreko paketeekin bateragarritasun-arazo bat egon daiteke egiturak behe-mailako manipulaziorako.
  • Windows plataformarako herdoil-konpiladorearen eraikuntzak PGO optimizazioak erabiltzen ditu (profilen bidezko optimizazioa), eta horri esker, kodearen konpilazioaren errendimendua % 10-20 handitu da.
  • Konpilatzaileak abisu berri bat ezarri du zenbait egituratan erabiltzen ez diren eremuei buruz.

Gainera, Rust hizkuntza-konpilatzailearen inplementazio alternatibo baten garapenari buruzko egoera-txostena ikus dezakezu, gccrs proiektuak (GCC Rust) prestatua eta GCCn sartzeko onartua. Frontend-a integratu ondoren, GCC tresna estandarrak Rust hizkuntzan programak konpilatzeko erabil daitezke, LLVM garapenak erabiliz eraikitako rustc konpilatzailea instalatu beharrik gabe. Garapena bidean dagoen bitartean, eta ezusteko arazorik izan ezik, Rust frontend-a datorren urteko maiatzean aurreikusitako GCC 13 bertsioan integratuko da. Rust-en GCC 13 inplementazioa beta egoeran egongo da, oraindik ez dago gaituta modu lehenetsian.

Iturria: opennet.ru

Gehitu iruzkin berria