Rust 1.78 a fost lansat. Limbajul Borgo care combină punctele forte ale Go și Rust

A fost publicată lansarea limbajului de programare de uz general Rust 1.78, fondat de proiectul Mozilla, dar dezvoltat acum sub auspiciile organizației independente non-profit Rust Foundation. Limbajul se concentrează pe siguranța memoriei și oferă mijloacele pentru a obține un paralelism ridicat al jobului, evitând în același timp utilizarea unui colector de gunoi și a unui timp de rulare (timpul de rulare este redus la inițializarea de bază și întreținerea bibliotecii standard).

Metodele de manipulare a memoriei Rust salvează dezvoltatorul de erori la manipularea pointerilor și protejează împotriva problemelor care apar din cauza manipulării memoriei de nivel scăzut, cum ar fi accesarea unei zone de memorie după ce aceasta a fost eliberată, dereferențiarea pointerilor nuli, depășirile de buffer etc. Pentru a distribui biblioteci, a furniza versiuni și a gestiona dependențe, proiectul dezvoltă managerul de pachete Cargo. Depozitul crates.io este acceptat pentru găzduirea bibliotecilor.

Siguranța memoriei este furnizată în Rust în timpul compilării prin verificarea referințelor, urmărirea proprietății obiectului, urmărirea duratelor de viață a obiectelor (sfere de aplicare) și evaluarea corectitudinii accesului la memorie în timpul execuției codului. Rust oferă, de asemenea, protecție împotriva depășirilor de numere întregi, necesită inițializarea obligatorie a valorilor variabilelor înainte de utilizare, gestionează mai bine erorile în biblioteca standard, aplică implicit conceptul de referințe imuabile și variabile, oferă tastare statică puternică pentru a minimiza erorile logice.

Principalele inovații:

  • A fost propus un nou spațiu de nume de atribut „#[diagnostic]”, oferind un mijloc de a influența mesajele de eroare produse de compilator. Primul din noul spațiu este atributul „#[diagnostic::on_unimplemented]”, care poate fi folosit pentru a personaliza mesajele de eroare aruncate într-o situație în care trebuie să utilizați o trăsătură care nu este implementată pentru tip. #[diagnostic::on_unimplemented( message = "Mesajul meu pentru `ImportantTrait<{A}>` nu este implementat pentru `{Self}`", label = "My Label", note = "Nota 1", note = "Notă 2" )] trăsătură ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } eroare[E32]: Mesajul meu pentru `ImportantTrait ` nu este implementat pentru `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Eticheta mea | | | cerut de o constrângere introdusă prin prezenta cerere | = ajutor: trăsătura `ImportantTrait ` nu este implementat pentru `String` = notă: Nota 18 = notă: Nota 12
  • Verificările pre-afirmare aplicate funcțiilor nesigure pot fi acum amânate până la generarea codului, permițând ca aceste verificări să fie efectuate fără a fi nevoie de a construi biblioteca standard în modul „#[cfg(debug_assertions)]”. Pentru a declanșa verificări, acum este suficient să activați afirmațiile de depanare pentru versiunile de testare sau de depanare ale codului dvs.
  • Comportamentul funcțiilor din biblioteca standard care afectează alinierea pointerilor și secțiunilor este acum previzibil în timpul execuției și depinde de datele de intrare. Funcția pointer::align_offset, care calculează decalajul pentru a alinia pointerul, returnează acum use::MAX numai dacă operația eșuează. Funcțiile slice::align_to și slice::align_to_mut ambele, care transformă feliile într-o reprezentare cu o felie de mijloc aliniată și feliile originale de început și de sfârșit, acum returnează întotdeauna cea mai mare parte din mijloc.
  • Următoarele au fost transferate în categoria stabilă:
    • impl Citiți pentru &Stdin
    • Permiteți utilizarea unei durate de viață non-statice (non-statice) pentru unele implementări std::error:: legate de eroare.
    • Implementarea implementării ?Valoarea de dimensiune este permisă.
    • impl Din pentru io::Eroare
  • Funcția Barrier::new() a fost stabilizată pentru a fi utilizată cu atributul „const” în orice context în loc de constante.
  • Pentru platformele țintă x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm și i686_10-pc-windows-gnullvm-sgnu-windowm acum necesită cel puțin versiunea Windows XNUMX.
  • Al treilea nivel de suport a fost implementat pentru platformele wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf și loongarch64-unknown-linux-musl. Al treilea nivel implică suport de bază, dar fără testare automată, publicarea versiunilor oficiale sau verificarea dacă codul poate fi construit.
  • Al doilea nivel de suport pentru platforma țintă Add wasm32-wasip1 a fost implementat. Al doilea nivel de suport presupune o garanție de montaj.
  • Platforma wasm32-wasi-preview1-threads a fost redenumită în wasm32-wasip1-threads.
  • Compilatorul a fost schimbat pentru a utiliza LLVM 18. Când utilizați LLVM 18 pentru arhitecturi x86-32 și x86-64, ABI-ul asociat tipurilor u128 și i128 a fost modificat.
  • În managerul Cargo Pact, versiunea 4 a fișierelor de blocare (lockfile v4) a fost stabilizată.
  • Cargo are un cache global stabilizat cu informații despre cea mai recentă utilizare a datelor. Cache-ul este găzduit în $CARGO_HOME/.global-cache folosind SQLite și este actualizat automat pentru a reflecta cele mai recente modificări ale indexului, fișierului crate, directorului de coduri, clonării git și verificarii git.

În plus, limbajul de programare Borgo încearcă să fie mai expresiv decât limbajul Go, dar mai puțin complex decât limbajul Rust. Borgo combină cele mai bune caracteristici ale Go și Rust, compensând deficiențele fiecărei limbi. De exemplu, Go este simplu și direct, dar nu oferă caracteristici de siguranță avansate. Limbajul Rust oferă instrumente pentru programare sigură, dar este prea complicat. Proiectul este dezvoltat de Marco Sampellegrini, autorul The Simple Haskell Handbook și dezvoltatorul sistemului de integrare continuă Quad CI.

Rust 1.78 a fost lansat. Limbajul Borgo care combină punctele forte ale Go și Rust

Borgo folosește tastare statică, tipuri Go-like și sintaxă Rust-like. Punctele și virgulă sunt opționale la sfârșitul rândurilor în codul Borgo. Codul Borgo este compilat într-o reprezentare Go care este pe deplin compatibilă cu pachetele Go existente. Codul compilatorului este scris în Rust și este distribuit sub licența ISC. utilizați 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 = potrivire stare { NetworkState.Loading => „încărcare”, NetworkState.Failed(cod) => fmt.Sprintf(„Am primit codul de eroare: %d”, cod), NetworkState.Success (res) => res.title, } fmt.Println(msg) }

Sursa: opennet.ru

Adauga un comentariu