Bol vydaný univerzálny programovací jazyk Rust 1.78, založený projektom Mozilla, ale teraz vyvinutý pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnosť pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh, pričom sa vyhýba používaniu zberača odpadu a runtime (beh je zredukovaný na základnú inicializáciu a údržbu štandardnej knižnice).
Metódy spracovania pamäte Rustu chránia vývojára pred chybami pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú v dôsledku nízkoúrovňového spracovania pamäte, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, pretečenie vyrovnávacej pamäte atď. Na distribúciu knižníc, poskytovanie zostáv a správu závislostí projekt vyvíja správcu balíkov Cargo. Úložisko crates.io je podporované pre hosťovanie knižníc.
Bezpečnosť pamäte je v Rust zabezpečená v čase kompilácie prostredníctvom kontroly referencií, sledovania vlastníctva objektu, sledovania životnosti objektov (rozsahov) a hodnotenia správnosti prístupu do pamäte počas vykonávania kódu. Rust tiež poskytuje ochranu proti pretečeniu celých čísel, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie zvláda chyby v štandardnej knižnici, štandardne aplikuje koncept nemenných referencií a premenných, ponúka silné statické typovanie na minimalizáciu logických chýb.
Hlavné inovácie:
- Bol navrhnutý nový priestor názvov atribútov "#[diagnostic]", ktorý poskytuje prostriedky na ovplyvnenie chybových správ produkovaných kompilátorom. Prvým v novom priestore je atribút „#[diagnostic::on_unimplemented]“, ktorý možno použiť na prispôsobenie chybových hlásení v situácii, keď potrebujete použiť vlastnosť, ktorá pre daný typ nie je implementovaná. #[diagnostic::on_unimplemented( message = "Moja správa pre `ImportantTrait<{A}>` nie je implementovaná pre `{Self}`", label = "Moje označenie", note = "Poznámka 1", note = "Poznámka 2" )] vlastnosť Dôležitá vlastnosť {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Moja správa pre `ImportantTrait ` nie je implementovaný pre `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^^ Môj štítok | | | požadované viazaním zavedeným touto výzvou | = pomoc: vlastnosť „Dôležitá vlastnosť ` nie je implementovaný pre `String` = poznámka: Poznámka 18 = poznámka: Poznámka 12
- Kontroly predbežného tvrdenia aplikované na nebezpečné funkcie môžu byť teraz odložené až do vygenerovania kódu, čo umožňuje vykonávať tieto kontroly bez potreby budovania štandardnej knižnice v režime „#[cfg(debug_assertions)]“. Na spustenie kontrol teraz stačí povoliť ladiace prvky pre testovacie alebo ladiace zostavy vášho kódu.
- Správanie funkcií v štandardnej knižnici, ktoré ovplyvňujú zarovnanie ukazovateľov a rezov, je teraz predvídateľné za behu a závisí od vstupných údajov. Funkcia pointer::align_offset, ktorá vypočítava offset na zarovnanie ukazovateľa, teraz vracia useize::MAX iba v prípade, že operácia zlyhá. Funkcie slice::align_to a slice::align_to_mut both, ktoré transformujú rezy na reprezentáciu so zarovnaným stredným rezom a pôvodnými počiatočnými a koncovými rezmi, teraz vždy vrátia najväčšiu strednú časť.
- Do kategórie stajní boli preradení:
- impl Čítať pre &Stdin
- Povoliť použitie nestatickej (nestatickej) životnosti pre niektoré implementácie súvisiace s std::error::Error.
- Impl implementácia ?Hodnota veľkosti je povolená.
- impl Od pre io::Chyba
- Funkcia Barrier::new() bola stabilizovaná na použitie s atribútom "const" v akomkoľvek kontexte namiesto konštánt.
- Pre cieľové platformy x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm a i686-pc-windows-gnullvm teraz vyžaduje aspoň verziu Windows 10.
- Tretia úroveň podpory bola implementovaná pre platformy wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf a loongarch64-unknown-linux-musl. Tretia úroveň zahŕňa základnú podporu, ale bez automatického testovania, zverejňovania oficiálnych verzií a overovania zostaviteľnosti kódu.
- Bola implementovaná druhá úroveň podpory pre cieľovú platformu Add wasm32-wasip1. Druhá úroveň podpory zahŕňa záruku montáže.
- Platforma wasm32-wasi-preview1-threads bola premenovaná na wasm32-wasip1-threads.
- Kompilátor bol prepnutý na používanie LLVM 18. Pri používaní LLVM 18 pre architektúry x86-32 a x86-64 sa zmenilo ABI spojené s typmi u128 a i128.
- V správcovi paktu Cargo bola stabilizovaná verzia 4 súborov zámkov (lockfile v4).
- Cargo má stabilizovanú globálnu vyrovnávaciu pamäť s informáciami o najnovšom využití dát. Cache je hosťovaná v $CARGO_HOME/.global-cache pomocou SQLite a automaticky sa aktualizuje, aby odrážala najnovšie zmeny v indexe, súbore prepravky, adresári kódu, klonu git a pokladni git.
Okrem toho sa programovací jazyk Borgo snaží byť výraznejší ako jazyk Go, ale menej zložitý ako jazyk Rust. Borgo kombinuje najlepšie vlastnosti Go a Rust, čím kompenzuje nedostatky každého jazyka. Napríklad Go je jednoduchý a priamočiary, ale neposkytuje pokročilé bezpečnostné funkcie. Jazyk Rust poskytuje nástroje na bezpečné programovanie, ale je príliš komplikovaný. Projekt vyvíja Marco Sampellegrini, autor The Simple Haskell Handbook a vývojár kontinuálneho integračného systému Quad CI.

Borgo používa statické písanie, Go-like typy a Rust-like syntax. Bodkočiarky sú na konci riadkov v kóde Borgo voliteľné. Kód Borgo je zostavený do reprezentácie Go, ktorá je plne kompatibilná s existujúcimi balíkmi Go. Kód kompilátora je napísaný v jazyku Rust a je distribuovaný pod licenciou ISC. použite fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, Duration: int, } fn main() { let res = Response { title: “Ahoj svet”, trvanie: 0, } let stav = NetworkState.Success(res) nech msg = stav zhody { NetworkState.Loading => “stále sa načítava”, NetworkState.Failed(code) => fmt.Sprintf(“Chybový kód: %d”, kód), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Zdroj: opennet.ru
