Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.78, založeného projektem Mozilla, ale nyní vyvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se soustředí na bezpečnost paměti a poskytuje prostředky k dosažení vysokého paralelismu úloh a zároveň se vyhýbá použití garbage collectoru a runtime (runtime je redukováno na základní inicializaci a údržbu standardní knihovny).
Metody zpracování paměti Rust šetří vývojáře před chybami při manipulaci s ukazateli a chrání před problémy, které vznikají v důsledku nízkoúrovňového zpracování paměti, jako je přístup k oblasti paměti po jejím uvolnění, dereferencování nulových ukazatelů, přetečení vyrovnávací paměti atd. Pro distribuci knihoven, poskytování sestavení a správu závislostí projekt vyvíjí správce balíčků Cargo. Úložiště crates.io je podporováno pro hostování knihoven.
Bezpečnost paměti je v Rustu zajištěna v době kompilace prostřednictvím kontroly referencí, sledování vlastnictví objektů, sledování životnosti objektů (rozsahů) a hodnocení správnosti přístupu do paměti během provádění kódu. Rust také poskytuje ochranu proti přetečení celých čísel, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, standardně aplikuje koncept neměnných referencí a proměnných, nabízí silné statické typování pro minimalizaci logických chyb.
Hlavní inovace:
- Byl navržen nový jmenný prostor atributů "#[diagnostic]", který poskytuje prostředky k ovlivnění chybových zpráv vytvářených kompilátorem. První v novém prostoru je atribut „#[diagnostic::on_unimplemented]“, který lze použít k přizpůsobení chybových zpráv vržených v situaci, kdy potřebujete použít vlastnost, která není pro daný typ implementována. #[diagnostic::on_unimplemented( message = "Moje zpráva pro `ImportantTrait<{A}>` není implementována pro `{Self}`", label = "Můj štítek", note = "Poznámka 1", note = "Poznámka 2" )] vlastnost ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Moje zpráva pro `ImportantTrait ` není implementováno pro `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Můj štítek | | | požadovaná vazbou zavedenou touto výzvou | = pomoc: vlastnost `ImportantRait ` není implementováno pro ,String` = poznámka: Poznámka 18 = poznámka: Poznámka 12
- Kontroly před potvrzením aplikované na nebezpečné funkce lze nyní odložit až do vygenerování kódu, což umožňuje provádět tyto kontroly bez nutnosti vytvářet standardní knihovnu v režimu "#[cfg(debug_assertions)]". Ke spuštění kontrol nyní stačí povolit ladění pro testování nebo ladění sestavení vašeho kódu.
- Chování funkcí ve standardní knihovně, které ovlivňují zarovnání ukazatelů a řezů, je nyní předvídatelné za běhu a závisí na vstupních datech. Funkce pointer::align_offset, která vypočítá offset pro zarovnání ukazatele, nyní vrací useize::MAX pouze v případě, že operace selže. Funkce slice::align_to a slice::align_to_mut both, které transformují řezy na reprezentaci se zarovnaným středním řezem a původními počátečními a koncovými řezy, nyní vždy vracejí největší střední část.
- Do kategorie stájí byli převedeni:
- impl Přečíst pro &Stdin
- Povolit použití nestatické (nestatické) životnosti pro některé implementace související se std::error::Error.
- Impl implementace ?Hodnota velikosti je povolena.
- impl Od for io::Error
- Funkce Barrier::new() byla stabilizována pro použití s atributem "const" v jakémkoli kontextu namísto konstant.
- Pro cílové 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 nyní vyžaduje alespoň verzi Windows 10.
- Třetí úroveň podpory byla implementována pro platformy wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf a loongarch64-unknown-linux-musl. Třetí úroveň zahrnuje základní podporu, ale bez automatického testování, publikování oficiálních sestavení nebo kontroly, zda lze kód sestavit.
- Byla implementována druhá úroveň podpory pro cílovou platformu Add wasm32-wasip1. Druhý stupeň podpory zahrnuje záruku montáže.
- Platforma wasm32-wasi-preview1-threads byla přejmenována na wasm32-wasip1-threads.
- Kompilátor byl přepnut na použití LLVM 18. Při použití LLVM 18 pro architektury x86-32 a x86-64 bylo změněno ABI spojené s typy u128 a i128.
- Ve správci Cargo pakt byla stabilizována verze 4 souborů zámků (lockfile v4).
- Cargo má stabilizovanou globální mezipaměť s informacemi o nejnovějším využití dat. Cache je hostována v $CARGO_HOME/.global-cache pomocí SQLite a je automaticky aktualizována, aby odrážela nejnovější změny v indexu, souboru bedny, adresáři kódu, klonu git a pokladně git.
Kromě toho se programovací jazyk Borgo snaží být výraznější než jazyk Go, ale méně komplexní než jazyk Rust. Borgo kombinuje ty nejlepší vlastnosti Go a Rust a kompenzuje nedostatky každého jazyka. Například Go je jednoduchý a přímočarý, ale neposkytuje pokročilé bezpečnostní funkce. Jazyk Rust poskytuje nástroje pro bezpečné programování, ale je příliš komplikovaný. Projekt vyvíjí Marco Sampellegrini, autor The Simple Haskell Handbook a vývojář kontinuálního integračního systému Quad CI.

Borgo používá statické psaní, Go-like typy a Rust-like syntaxi. Středníky jsou volitelné na konci řádků v kódu Borgo. Kód Borgo je zkompilován do reprezentace Go, která je plně kompatibilní se stávajícími balíčky Go. Kód kompilátoru je napsán v jazyce Rust a je distribuován pod licencí ISC. použijte fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, Duration: int, } fn main() { let res = Response { title: “Ahoj světe”, trvání: 0, } let stav = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “stále se načítá”, NetworkState.Failed(code) => fmt.Sprintf(“Dostal kód chyby: %d”, kód), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Zdroj: opennet.ru
