Rust 1.78 verëffentlecht. Borgo Sprooch déi d'Stäerkte vu Go a Rust kombinéiert

D'Verëffentlechung vun der Rust 1.78 allgemeng Zweck Programméierungssprooch, gegrënnt vum Mozilla-Projet, awer elo entwéckelt ënner der Regie vun der onofhängeger Asbl Rust Foundation, gouf publizéiert. D'Sprooch konzentréiert sech op d'Erënnerungssécherheet a stellt d'Moyene fir en héije Jobparallelismus z'erreechen, während d'Benotzung vun engem Gerempels a Runtime vermeit (Runtime gëtt op Basisinitialiséierung an Ënnerhalt vun der Standardbibliothéik reduzéiert).

Rust d'Erënnerungsveraarbechtungsmethoden retten den Entwéckler vu Feeler beim Manipulatioun vu Pointer a schützt géint Probleemer déi entstinn wéinst nidderegen Niveau Memory Handhabung, sou wéi Zougang zu engem Erënnerungsberäich nodeems se befreit gouf, Nullpointer ofgeleent, Pufferiwwerschlag, etc. Fir Bibliothéiken ze verdeelen, Builds ze bidden an Ofhängegkeeten ze managen, entwéckelt de Projet de Cargo Package Manager. De crates.io Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten.

Gedächtnissécherheet gëtt a Rust zur Zesummesetzungszäit zur Verfügung gestallt duerch Referenzprüfung, Verfollegung vum Objektbesëtzer, Verfollegung vun Objektliewenszäiten (Scope), an d'Korrektheet vum Gedächtniszougang wärend der Code Ausféierung bewäerten. Rust bitt och Schutz géint ganz Zuelen Iwwerschwemmungen, erfuerdert obligatoresch Initialiséierung vu variabelen Wäerter virum Gebrauch, handhabt Feeler besser an der Standardbibliothéik, applizéiert d'Konzept vun onverännerleche Referenzen a Variablen als Standard, bitt staark statesch Tippen fir logesch Feeler ze minimiséieren.

Haaptinnovatiounen:

  • En neien Attribut-Nummraum "#[diagnostic]" gouf proposéiert, wat e Mëttel ubitt fir d'Fehlermeldungen, déi vum Compiler produzéiert ginn, ze beaflossen. Déi éischt am neie Raum ass den "#[diagnostic :: on_unimplemented]" Attribut, dat benotzt ka ginn fir d'Fehlermeldungen ze personaliséieren, déi an enger Situatioun geworf ginn, wou Dir en Trait benotze musst deen net fir den Typ implementéiert ass. #[diagnostic::on_unimplemented( message = "Mäi Message fir `ImportantTrait<{A}>` ass net fir `{Self}` implementéiert", label = "Mäi Label", note = "Note 1", note = "Notiz 2" )] trait ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } Feeler [E32]: Mäi Message fir 'ImportantTrait ` ass net fir `String` implementéiert —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^^ Mäi Label | | | verlaangt vun engem gebonnen vun dësem Opruff agefouert | = Hëllef: den Trait `ImportantTrait ` ass net implementéiert fir `String` = Notiz: Notiz 18 = Notiz: Notiz 12
  • Pre-assert Kontrollen, déi op onsécher Funktiounen applizéiert ginn, kënnen elo bis Code Generatioun ausgesat ginn, sou datt dës Kontrollen ausgefouert kënne ginn ouni d'Noutwendegkeet d'Standardbibliothéik am "#[cfg(debug_assertions)]" Modus ze bauen. Fir Kontrollen auszeléisen, ass et elo genuch fir Debug Behaaptungen fir Test oder Debug Builds vun Ärem Code z'aktivéieren.
  • D'Behuele vu Funktiounen an der Standardbibliothéik, déi d'Ausrichtung vu Pointer a Scheiwen beaflossen, ass elo prévisibel bei der Runtime an hänkt vun den Inputdaten of. D'Funktioun Pointer :: align_offset, déi d'Offset berechent fir de Pointer ze alignéieren, gëtt elo just usize :: MAX zréck wann d'Operatioun feelt. D'Funktiounen Slice :: align_to an Slice :: align_to_mut béid, déi d'Scheiwen an eng Duerstellung transforméieren mat enger ausgeriichter Mëttelschnëtt an den ursprénglechen Start- an Enn-Scheiwen, ginn elo ëmmer de gréisste Mëtteldeel zréck.
  • Déi folgend goufen an d'Stabilitéitskategorie transferéiert:
    • impl Liesen fir & Stdin
    • Erlaabt de Gebrauch vun engem net-statesche (net-statesch) Liewensdauer fir e puer std :: Feeler :: Feeler-Zesummenhang Implementatiounen.
    • Impl Ëmsetzung ? Gréisst Wäert ass erlaabt.
    • impl vun fir io :: Feeler
  • D'Barriere :: nei () Funktioun gouf stabiliséiert fir mat dem "const" Attribut an all Kontext anstatt Konstanten ze benotzen.
  • Fir Zilplattformen x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm an i686-pc-windows-vm-windows elo erfuerdert op d'mannst Windows 10 Versioun.
  • Den drëtten Niveau vun der Ënnerstëtzung gouf fir d'wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf a loongarch64-unknown-linux-musl Plattformen implementéiert. Den drëtten Niveau beinhalt d'Basis Ënnerstëtzung, awer ouni automatiséiert Testen, offiziell Builds ze publizéieren oder ze kontrolléieren ob de Code ka gebaut ginn.
  • Den zweeten Niveau vun der Ënnerstëtzung fir d'Zilplattform Add wasm32-wasip1 gouf implementéiert. Den zweeten Niveau vun der Ënnerstëtzung beinhalt eng Versammlungsgarantie.
  • D'Plattform wasm32-wasi-preview1-threads gouf op wasm32-wasip1-threads ëmbenannt.
  • De Compiler gouf gewiesselt fir LLVM ze benotzen 18. Wann Dir LLVM 18 fir x86-32 an x86-64 Architekturen benotzt, ass den ABI mat den u128- an i128-Typen verbonne ginn.
  • Am Cargo Pakt Manager ass d'Versioun 4 vu Sperrdateien (Lockfile v4) stabiliséiert.
  • Cargo huet e stabiliséierte globalen Cache mat Informatioun iwwer déi lescht Dateverbrauch. De Cache gëtt an $CARGO_HOME/.global-Cache mat SQLite gehost a gëtt automatesch aktualiséiert fir déi lescht Ännerungen am Index, Crate Datei, Code Verzeechnes, Git Klon a Git Checkout ze reflektéieren.

Zousätzlech probéiert d'Borgo Programméierungssprooch méi expressiv ze sinn wéi d'Go Sprooch, awer manner komplex wéi d'Rust Sprooch. Borgo kombinéiert déi bescht Feature vu Go a Rust, fir d'Mängel vun all Sprooch ze kompenséieren. Zum Beispill, Go ass einfach an einfach, awer bitt keng fortgeschratt Sécherheetsfeatures. D'Rust Sprooch bitt Tools fir sécher Programméierung, awer ass iwwerkomplizéiert. De Projet gëtt vum Marco Sampellegrini entwéckelt, Autor vum The Simple Haskell Handbook an Entwéckler vum Quad CI kontinuéierlechen Integratiounssystem.

Rust 1.78 verëffentlecht. Borgo Sprooch déi d'Stäerkte vu Go a Rust kombinéiert

Borgo benotzt statesch Tippen, Go-ähnlechen Typen, a Rustähnlech Syntax. Semicolons sinn fakultativ um Enn vun Linnen am Borgo Code. Borgo Code gëtt an eng Go Representatioun zesummegesat déi komplett kompatibel ass mat existente Go Packagen. De Compiler Code ass a Rust geschriwwen a gëtt ënner der ISC Lizenz verdeelt. benotzen fmt enum NetworkState { Loading, Failed (int), Success (T), } struct Response { title: string, duration: int, } fn main () { let res = Äntwert { title: "Hallo Welt", Dauer: 0, } loosse Staat + (res) => res.title, } fmt.Println(msg) }

Source: opennet.ru

Setzt e Commentaire