Rust 1.78 útbrocht. Borgo taal dy't kombinearret de sterke punten fan Go en Rust

De algemiene programmeertaal Rust 1.78, oprjochte troch it Mozilla-projekt mar no ûntwikkele ûnder auspysjes fan de ûnôfhinklike non-profit organisaasje Rust Foundation, is frijjûn. De taal rjochtet him op ûnthâld feilichheid en jout de middels te berikken hege baan parallelism wylst it foarkommen fan it brûken fan in garbage collector en runtime (runtime wurdt redusearre ta basis inisjalisaasje en ûnderhâld fan de standert bibleteek).

De metoaden foar ûnthâldbehanneling fan Rust besparje de ûntwikkelder fan flaters by it manipulearjen fan oanwizers en beskermje tsjin problemen dy't ûntsteane troch ûnthâldôfhanneling op leech nivo, lykas tagong krije ta in ûnthâldgebiet nei't it befrijd is, it ferwizen fan nul-oanwizers, buffer-oerrin, ensfh. Om bibleteken te fersprieden, builds te leverjen en ôfhinklikens te behearjen, ûntwikkelet it projekt de Cargo-pakketbehearder. It crates.io repository wurdt stipe foar hosting fan bibleteken.

Unthâld feilichheid wurdt foarsjoen yn Rust op it gearstallen tiid troch referinsje kontrôle, byhâlden fan foarwerp eigendom, byhâlden fan foarwerp lifetimes (omfang), en beoardielje de korrektheid fan ûnthâld tagong by koade útfiering. Rust leveret ek beskerming tsjin oerstreamingen fan heule getal, fereasket ferplichte inisjalisaasje fan fariabele wearden foar gebrûk, behannelet flaters better yn 'e standertbibleteek, tapast standert it konsept fan ûnferoarlike referinsjes en fariabelen, biedt sterke statyske typen om logyske flaters te minimalisearjen.

Wichtichste ynnovaasjes:

  • In nije attribút nammeromte "#[diagnostysk]" is foarsteld, in middel om te beynfloedzjen op de flaterberjochten produsearre troch de kompilator. De earste yn de nije romte is it "#[diagnostic :: on_unimplemented]" attribút, dat kin brûkt wurde om oanpasse de flater berjochten smiten yn in situaasje dêr't jo moatte brûke in eigenskip dat is net ymplemintearre foar it type. #[diagnostic::on_unimplemented( message = "Myn berjocht foar `ImportantTrait<{A}>` is net ymplementearre foar `{Self}`", label = "Myn Label", note = "Noat 1", note = "Opmerking 2" )] eigenskip ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } flater[E32]: Myn berjocht foar `ImportantTrait ` is net ymplementearre foar `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^^ My Label | | | fereaske troch in bûn ynfierd troch dizze oprop | = help: de eigenskip `ImportantTrait ` is net ymplementearre foar `String` = notysje: Notysje 18 = notysje: Notysje 12
  • Pre-assert kontrôles tapast op ûnfeilige funksjes kinne no wurde útsteld oant koade generaasje, wêrtroch dizze kontrôles kinne wurde útfierd sûnder de needsaak om de standert bibleteek te bouwen yn "#[cfg(debug_assertions)]" modus. Om kontrôles te triggerjen, is it no genôch om debug-asserts yn te skeakeljen foar test- of debugbuilds fan jo koade.
  • It gedrach fan funksjes yn 'e standertbibleteek dy't de ôfstimming fan oanwizers en plakjes beynfloedzje is no foarsisber by runtime en hinget ôf fan' e ynfiergegevens. De funksje oanwizer :: align_offset, dy't de offset berekkent om de oanwizer te rjochtsjen, jout no usize :: MAX allinich werom as de operaasje mislearret. De funksjes slice :: align_to en slice :: align_to_mut beide, dy't plakjes transformearje yn in foarstelling mei in ôfstimd middenplak en de orizjinele begjin- en einplakken, jouwe no altyd it grutste middendiel werom.
  • De folgjende waarden oerbrocht nei de stabile kategory:
    • impl Lês foar & Stdin
    • Tastean it brûken fan in net-statyske (net-statyske) libben foar guon std :: error :: Flater-relatearre ymplemintaasjes.
    • Impl ymplemintaasje ?Sized wearde is tastien.
    • impl fan foar io :: Flater
  • De funksje Barrier :: new() is stabilisearre om te brûken mei it attribút "const" yn elke kontekst ynstee fan konstanten.
  • Foar doelplatfoarms x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm en i686-pc-gnull-vm-windows fereasket no op syn minst Windows 10 ferzje.
  • It tredde nivo fan stipe is ymplementearre foar de platfoarms wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf en loongarch64-unknown-linux-musl. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen, publisearjen fan offisjele builds, of kontrolearjen oft de koade boud wurde kin.
  • It twadde nivo fan stipe foar it doelplatfoarm Add wasm32-wasip1 is ymplementearre. It twadde nivo fan stipe omfettet in garânsje foar montage.
  • It platfoarm wasm32-wasi-preview1-threads is omneamd ta wasm32-wasip1-threads.
  • De gearstaller is oerskeakele om LLVM 18 te brûken. By it brûken fan LLVM 18 foar x86-32- en x86-64-arsjitektuer, is de ABI ferbûn mei de u128- en i128-typen feroare.
  • Yn de Cargo pact manager, ferzje 4 fan slot triemmen (lockfile v4) is stabilisearre.
  • Cargo hat in stabilisearre globale cache mei ynformaasje oer it lêste gegevensgebrûk. De cache wurdt hosted yn $CARGO_HOME/.global-cache mei SQLite en wurdt automatysk bywurke om de lêste wizigingen te reflektearjen oan 'e yndeks, kratbestân, koademap, git-kloon en git-checkout.

Dêrnjonken besiket de programmeartaal Borgo mear ekspressive te wêzen as de Go-taal, mar minder kompleks as de Rust-taal. Borgo kombinearret de bêste skaaimerken fan Go en Rust, en makket foar de tekoarten fan elke taal. Bygelyks, Go is ienfâldich en rjochtlinige, mar jout gjin avansearre type feiligens funksjes. De Rust-taal leveret ark foar feilige programmearring, mar is te komplisearre. It projekt wurdt ûntwikkele troch Marco Sampellegrini, skriuwer fan The Simple Haskell Handbook en ûntwikkelder fan it Quad CI kontinu yntegraasjesysteem.

Rust 1.78 útbrocht. Borgo taal dy't kombinearret de sterke punten fan Go en Rust

Borgo brûkt statysk typen, Go-like typen, en Rust-like syntaksis. Puntkomma's binne opsjoneel oan 'e ein fan rigels yn Borgo koade. Borgo-koade wurdt gearstald yn in Go-fertsjintwurdiging dy't folslein kompatibel is mei besteande Go-pakketten. De kompilatorkoade is skreaun yn Rust en wurdt ferspraat ûnder de ISC-lisinsje. brûk fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int, } fn main() { let res = Response { title: "Hello world", duration: 0, } lit steat = NetworkState.Success(res) let msg = match state { NetworkState.Loading => "noch laden", NetworkState.Failed(code) => fmt.Sprintf("Got error code: %d", code), NetworkState.Success (res) => res.title, } fmt.Println(msg) }

Boarne: opennet.ru

Add a comment