Rust 1.78 hè liberatu. Lingua Borgu chì unisce i punti di forza di Go è Rust

A liberazione di a lingua di prugrammazione Rust 1.78 generale, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspices di l'urganizazione indipendente Rust Foundation, hè stata publicata. A lingua si focalizeghja nantu à a sicurità di a memoria è furnisce i mezi per ottene un altu parallelismu di u travagliu evitendu l'usu di un cullizzioni di basura è runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di a biblioteca standard).

I metudi di gestione di a memoria di Rust salvanu u sviluppatore da l'errore quandu manipulanu i puntatori è prutegge da i prublemi chì si sviluppanu per via di a gestione di memoria di pocu livellu, cum'è l'accessu à una zona di memoria dopu chì hè stata liberata, dereferencing null pointers, buffer overruns, etc. Per distribuisce biblioteche, furnisce e custruzzioni è gestisce e dipendenze, u prughjettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per l'ospitu di biblioteche.

A sicurezza di a memoria hè furnita in Rust à u tempu di compilazione attraversu a verificazione di riferimentu, u seguimentu di a pruprietà di l'ughjettu, a traccia di a vita di l'ughjettu (scopi), è a valutazione di a correttezza di l'accessu di memoria durante l'esekzione di codice. Rust furnisce ancu prutezzione contra i overflows integer, esige l'inizializazione obligatoria di i valori variabili prima di l'usu, gestisce l'errori megliu in a biblioteca standard, applica u cuncettu di referenze immutabili è variabili per difettu, offre una forte tipografia statica per minimizzà l'errori lògichi.

Innuvazioni principali:

  • Un novu attributu namespace "#[diagnostic]" hè statu prupostu, chì furnisce un mezzu per influenzà i missaghji d'errore produtti da u compilatore. U primu in u novu spaziu hè l'attributu "#[diagnostic::on_unimplemented]", chì pò esse usatu per persunalizà i missaghji d'errore lanciati in una situazione induve avete bisognu di utilizà un trattu chì ùn hè micca implementatu per u tipu. #[diagnostic::on_unimplemented( message = "U mo messagiu per `ImportantTrait<{A}>` ùn hè micca implementatu per `{Self}`", label = "A mo etichetta", note = "Nota 1", note = "Nota 2" )] trait ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main () { use_my_trait (String::new ()); } errore [E32]: U mo messagiu per `ImportantTrait ` ùn hè micca implementatu per `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ My Label | | | dumandata da un bound introduttu da sta chjama | = aiutu : u trattu `ImportantTrait ` ùn hè micca implementatu per `String' = nota: Nota 18 = nota: Nota 12
  • I cuntrolli di pre-affirmazione applicati à e funzioni insicure ponu avà esse rinviati finu à a generazione di codice, chì permettenu questi cuntrolli per esse realizati senza a necessità di custruisce a biblioteca standard in u modu "#[cfg(debug_assertions)]". Per attivà i cuntrolli, hè avà abbastanza per attivà l'asserzioni di debug per teste o debug builds di u vostru codice.
  • U cumpurtamentu di e funzioni in a libreria standard chì affettanu l'alineazione di puntatori è fette hè avà prevedibile in runtime è dipende da i dati di input. A funzione pointer::align_offset, chì calcula l'offset per allineà u puntatore, torna avà use::MAX solu se l'operazione falla. E funzioni slice::align_to è slice::align_to_mut tramindui, chì trasformanu e fette in una rapprisintazioni cù una fetta media allinata è e fette iniziali è finali originali, tornanu sempre sempre a parte media più grande.
  • I seguenti sò stati trasferiti à a categuria stabile:
    • impl Leghjite per &Stdin
    • Permette l'usu di una vita non statica (non statica) per alcune implementazioni di std::error::Error-related.
    • Implementa l'implementazione permessu à aduprà u valore ?Sized.
    • impl Da per io::Errore
  • A funzione Barrier::new() hè stata stabilizzata per esse aduprata cù l'attributu "const" in ogni cuntestu invece di custanti.
  • Per le piattaforme di destinazione x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm e i686_10-pc-windows-gnullvm-cgnu-windowm avà richiede almenu Windows XNUMX versione.
  • U terzu livellu di supportu hè statu implementatu per e piattaforme wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf è loongarch64-unknown-linux-musl. U terzu livellu implica un supportu basicu, ma senza teste automatizate, publicà custruzzioni ufficiali, o cuntrollà se u codice pò esse custruitu.
  • U sicondu livellu di supportu per a piattaforma di destinazione Add wasm32-wasip1 hè statu implementatu. U sicondu livellu di sustegnu implica una guaranzia di assemblea.
  • A piattaforma wasm32-wasi-preview1-threads hè stata rinominata in wasm32-wasip1-threads.
  • U compilatore hè cambiatu per utilizà LLVM 18. Quandu si usa LLVM 18 per l'architetture x86-32 è x86-64, l'ABI assuciatu cù i tipi u128 è i128 hè statu cambiatu.
  • In u gestore di pattu Cargo, a versione 4 di i schedarii di serratura (lockfile v4) hè stata stabilizzata.
  • Cargo hà una cache globale stabilizzata cù infurmazioni nantu à l'ultimu usu di dati. U cache hè allughjatu in $CARGO_HOME/.global-cache cù SQLite è hè aghjurnatu automaticamente per riflette l'ultimi cambiamenti à l'indici, crate file, code directory, git clone, è git checkout.

Inoltre, a lingua di prugrammazione Borgo prova à esse più spressiva chè a lingua Go, ma menu cumplessa chè a lingua Rust. Borgo unisce e migliori caratteristiche di Go è Rust, cumpensendu i difetti di ogni lingua. Per esempiu, Go hè simplice è simplice, ma ùn furnisce micca funzioni di sicurezza avanzate. A lingua Rust furnisce strumenti per a prugrammazione sicura, ma hè troppu cumplicatu. U prugettu hè sviluppatu da Marco Sampellegrini, autore di The Simple Haskell Handbook è sviluppatore di u sistema di integrazione continua Quad CI.

Rust 1.78 hè liberatu. Lingua Borgu chì unisce i punti di forza di Go è Rust

Borgo usa typing staticu, tipi Go-like, è sintassi Rust-like. I punti e virgule sò opzionali à a fine di e linee in codice Borgo. U codice Borgo hè cumpilatu in una rapprisintazioni Go chì hè cumplettamente compatible cù i pacchetti Go esistenti. U codice compilatore hè scrittu in Rust è hè distribuitu sottu a licenza ISC. aduprà fmt enum NetworkState { Loading, Failed (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 => "ancora caricatu", NetworkState.Failed (codice) => fmt.Sprintf ("Avete u codice d'errore: %d", codice), NetworkState.Success (res) => res.title, } fmt.Println(msg) }

Source: opennet.ru

Add a comment