Rust 1.78 rilaxxat. Lingwa Borgo li jgħaqqad il-qawwiet ta’ Go u Rust

Ġiet rilaxxata l-lingwa ta 'programmar għal skopijiet ġenerali Rust 1.78, imwaqqfa mill-proġett Mozilla iżda issa żviluppat taħt l-awspiċi tal-organizzazzjoni indipendenti mingħajr skop ta' qligħ Rust Foundation. Il-lingwa tiffoka fuq is-sikurezza tal-memorja u tipprovdi l-mezzi biex tikseb paralleliżmu għoli tax-xogħol filwaqt li tevita l-użu ta 'ġbir ta' żibel u runtime (runtime huwa mnaqqas għal inizjalizzazzjoni bażika u manutenzjoni tal-librerija standard).

Il-metodi tal-immaniġġjar tal-memorja ta 'Rut isalvaw lill-iżviluppatur minn żbalji meta jimmanipula l-indikazzjonijiet u jipproteġu kontra problemi li jinqalgħu minħabba t-tqandil tal-memorja ta' livell baxx, bħall-aċċess għal żona tal-memorja wara li tkun ġiet meħlusa, dereferencing null pointers, buffer overruns, eċċ. Biex iqassam il-libreriji, jipprovdi bini u jimmaniġġja d-dipendenzi, il-proġett jiżviluppa l-maniġer tal-pakkett tat-Tagħbija. Ir-repożitorju crates.io huwa appoġġjat għall-hosting tal-libreriji.

Is-sikurezza tal-memorja hija pprovduta f'Rut fil-ħin tal-kompilazzjoni permezz ta 'verifika ta' referenza, iżżomm kont tal-pussess tal-oġġett, iżżomm kont tal-ħajja tal-oġġetti (ambiti), u tivvaluta l-korrettezza tal-aċċess għall-memorja waqt l-eżekuzzjoni tal-kodiċi. Rust jipprovdi wkoll protezzjoni kontra overflows integer, jeħtieġ inizjalizzazzjoni obbligatorja ta 'valuri varjabbli qabel l-użu, jimmaniġġja l-iżbalji aħjar fil-librerija standard, japplika l-kunċett ta' referenzi immutabbli u varjabbli b'mod awtomatiku, joffri tajpjar statiku qawwi biex jimminimizza l-iżbalji loġiċi.

Innovazzjonijiet ewlenin:

  • Ġie propost spazju tal-isem tal-attribut ġdid "#[dijanjostiku]", li jipprovdi mezz biex jinfluwenza l-messaġġi ta' żball prodotti mill-kompilatur. L-ewwel fl-ispazju l-ġdid huwa l-attribut "#[diagnostic::on_unimplemented]", li jista 'jintuża biex jippersonalizza l-messaġġi ta' żball li jintefgħu f'sitwazzjoni fejn għandek bżonn tuża karatteristika li mhix implimentata għat-tip. #[diagnostic::on_unimplemented( message = "Il-Messaġġ Tiegħi għal `ImportantTrait<{A}>` mhux implimentat għal `{Self}`", label = "It-Tikketta Tiegħi", nota = "Nota 1", nota = "Nota 2" )] karatteristika ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } żball[E32]: Il-messaġġ tiegħi għal `ImportantTrait ` mhux implimentat għal `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ It-Tikketta Tiegħi | | | meħtieġa minn bound introdott b'din is-sejħa | = għajnuna: il-karatteristika `ImportantTrait ` mhux implimentat għal `String` = nota: Nota 18 = nota: Nota 12
  • Kontrolli ta' qabel l-asserzjoni applikati għal funzjonijiet mhux sikuri issa jistgħu jiġu differiti sal-ġenerazzjoni tal-kodiċi, li jippermettu li dawn il-kontrolli jsiru mingħajr il-ħtieġa li tinbena l-librerija standard fil-mod "#[cfg(debug_assertions)]". Biex tqanqal il-kontrolli, issa huwa biżżejjed li tippermetti d-debug asserts għal test jew debug builds tal-kodiċi tiegħek.
  • L-imġiba tal-funzjonijiet fil-librerija standard li jaffettwaw l-allinjament tal-indikazzjonijiet u l-flieli issa hija prevedibbli waqt ir-runtime u tiddependi fuq id-dejta tal-input. Il-funzjoni pointer::align_offset, li tikkalkula l-offset biex tallinja l-pointer, issa tirritorna use::MAX biss jekk l-operazzjoni tfalli. Il-funzjonijiet slice::align_to u slice::align_to_mut it-tnejn, li jittrasformaw slices f'rappreżentazzjoni bi slice tan-nofs allinjat u l-bidu u t-tmiem slices oriġinali, issa dejjem jirritornaw l-akbar parti tan-nofs.
  • Dawn li ġejjin ġew trasferiti għall-kategorija stabbli:
    • impl Aqra għal &Stdin
    • Ħalli l-użu ta' ħajja mhux statika (mhux statika) għal xi implimentazzjonijiet std::error::relatati ma' żbalji.
    • Impl implimentazzjoni permess li juża l-? Valur daqs.
    • impl Minn għal io::Żball
  • Il-funzjoni Barrier::new() ġiet stabbilizzata biex tintuża bl-attribut "const" fi kwalunkwe kuntest minflok kostanti.
  • Għall-pjattaformi fil-mira x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm u ii-windows-gnullvm-cgnu-windowm issa teħtieġ mill-inqas verżjoni tal-Windows 686.
  • It-tielet livell ta 'appoġġ ġie implimentat għall-pjattaformi wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf u loongarch64-unknown-linux-musl. It-tielet livell jinvolvi appoġġ bażiku, iżda mingħajr ittestjar awtomatizzat, pubblikazzjoni ta 'bini uffiċjali, jew verifika jekk il-kodiċi jistax jinbena.
  • It-tieni livell ta 'appoġġ għall-pjattaforma fil-mira Żid wasm32-wasip1 ġie implimentat. It-tieni livell ta 'appoġġ jinvolvi garanzija ta' assemblaġġ.
  • Il-pjattaforma wasm32-wasi-preview1-threads ingħatat isem ġdid għal wasm32-wasip1-threads.
  • Il-kompilatur inbidel biex juża LLVM 18. Meta jintuża LLVM 18 għal arkitetturi x86-32 u x86-64, l-ABI assoċjat mat-tipi u128 u i128 inbidel.
  • Fil-maniġer tal-patt tal-merkanzija, il-verżjoni 4 tal-fajls tal-lock (lockfile v4) ġiet stabbilizzata.
  • Il-merkanzija għandha cache globali stabbilizzata b'informazzjoni dwar l-aħħar użu tad-dejta. Il-cache hija ospitata f'$CARGO_HOME/.global-cache bl-użu ta' SQLite u tiġi aġġornata awtomatikament biex tirrifletti l-aħħar bidliet fl-indiċi, il-fajl tal-kaxex, id-direttorju tal-kodiċi, il-klonu git, u l-kontroll tal-git.

Barra minn hekk, il-lingwa tal-ipprogrammar Borgo tipprova tkun aktar espressiva mill-lingwa Go, iżda inqas kumplessa mill-lingwa Rust. Borgo jgħaqqad l-aqwa karatteristiċi ta’ Go u Rust, biex jagħmel tajjeb għan-nuqqasijiet ta’ kull lingwa. Pereżempju, Go hija sempliċi u sempliċi, iżda ma tipprovdix karatteristiċi ta 'sikurezza tat-tip avvanzat. Il-lingwa Rust tipprovdi għodda għall-ipprogrammar sikur, iżda hija kkumplikata żżejjed. Il-proġett qed jiġi żviluppat minn Marco Sampellegrini, awtur ta 'The Simple Haskell Handbook u żviluppatur tas-sistema ta' integrazzjoni kontinwa Quad CI.

Rust 1.78 rilaxxat. Lingwa Borgo li jgħaqqad il-qawwiet ta’ Go u Rust

Borgo juża typing statiku, tipi Go-like, u sintassi bħal Rust. Punti virguli huma fakultattivi fl-aħħar tal-linji fil-kodiċi Borgo. Il-kodiċi ta' Borgo huwa miġbur f'rappreżentazzjoni Go li hija kompletament kompatibbli mal-pakketti Go eżistenti. Il-kodiċi tal-kompilatur huwa miktub bir-Rut u huwa mqassam taħt il-liċenzja ISC. uża fmt enum NetworkState { Tagħbija, Fallit(int), Success(T), } struct Response { title: string, duration: int, } fn main () { let res = Response { title: “Hello world”, duration: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “għadu qed jitgħabbi”, NetworkState.Failed(code) => fmt.Sprintf(“Għandek kodiċi ta’ żball: %d”, kodiċi), NetworkState.Success (res) => res.titolu, } fmt.Println(msg) }

Sors: opennet.ru

Żid kumment