Utgivningen av Rust 1.65 allmänt programmeringsspråk, grundat av Mozilla-projektet, men nu utvecklat under överinseende av den oberoende ideella organisationen Rust Foundation, har publicerats. Språket fokuserar på minnessäkerhet och ger möjlighet att uppnå hög jobbparallellism samtidigt som man undviker användningen av en skräpsamlare och körtid (körtiden reduceras till grundläggande initiering och underhåll av standardbiblioteket).
Rusts minneshanteringsmetoder räddar utvecklaren från fel vid manipulering av pekare och skyddar mot problem som uppstår på grund av minneshantering på låg nivå, som att komma åt ett minnesområde efter att det har frigjorts, avläsning av nollpekare, buffertöverskridningar, etc. För att distribuera bibliotek, tillhandahålla builds och hantera beroenden utvecklar projektet Cargo package manager. Crates.io-förvaret stöds för värdbibliotek.
Minnessäkerhet tillhandahålls i Rust vid kompilering genom referenskontroll, hålla reda på objektägande, hålla reda på objektlivslängder (scopes) och bedöma riktigheten av minnesåtkomst under kodexekvering. Rust ger också skydd mot heltalsspill, kräver obligatorisk initiering av variabelvärden innan användning, hanterar fel bättre i standardbiblioteket, tillämpar konceptet med oföränderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.
Huvudsakliga innovationer:
- Tillagt stöd för generiska associerade typer (GAT, Generic Associated Types), som gör det möjligt att skapa typalias associerade med en annan typ och låter dig associera typkonstruktörer med egenskaper. egenskap Foo { typ Bar<'x>; }
- Uttrycket "let ... else" har implementerats, vilket gör att du kan kontrollera mönstermatchningsvillkoret direkt inuti "let"-uttrycket och exekvera godtycklig kod om mönstret inte matchar. låt Ok(count) = u64::from_str(count_str) else { panic!("Kan inte tolka heltal: '{count_str}'"); };
- Tillåt användning av en break-sats för att avsluta namngivna block i förtid, använd blocknamnet (etiketten) för att identifiera blocket som ska avslutas. låt result = 'blockera: { do_thing(); if condition_not_met() { break 'block 1; } gör_nästa_sak(); if condition_not_met() { break 'block 2; } do_last_thing(); 3};
- för Linux добавлена возможность раздельного сохранения отладочной информации (split-debuginfo), ранее доступная только для платформы macOS. При указании опции «-Csplit-debuginfo=unpacked» данные debuginfo в формате DWARF будут сохранены в несколько отдельных объектных файлов с расширением «.dwo». При указании «-Csplit-debuginfo=packed» будет создан один пакет в формате «.dwp», включающий все данные debuginfo для проекта. Для интеграции debuginfo непосредственно в секцию .debug_* ELF-объектов можно использовать опцию «-Csplit-debuginfo=off».
- En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
- std::backtrace::Backtrace
- Inbunden::as_ref
- std::io::läs_till_sträng
- <*const T>::cast_mut
- <*mut T>::cast_const
- Attributet "const", som bestämmer möjligheten att använda det i alla sammanhang istället för konstanter, används i funktionerna <*const T&>::offset_from och <*mut T>::offset_from
- Som en del av det sista steget av att överföra implementeringen av LSP (Language Server Protocol)-protokollet till rust-analyzer, ersattes den föråldrade implementeringen av Rust Language Server (RLS) med en stubserver som utfärdar en varning med ett förslag att byta till med hjälp av rostanalysator.
- Under kompileringen är stöd för inline-distribution av MIR-mellankod aktiverat, vilket påskyndar kompileringen av typiska lådapaket med 3-10 %.
- För att påskynda schemalagda byggnationer tillhandahåller Cargo-pakethanteraren sortering av jobb som väntar på exekvering i kön.
Dessutom kan du notera intervjun om användningen av språket Rust på Volvo för att utveckla komponenter i fordonsinformationssystem. Det finns inga planer på att skriva om befintlig och testad kod i Rust, men för ny kod är Rust ett av de föredragna alternativen för att förbättra kvaliteten till lägre kostnader. Arbetsgrupper relaterade till användningen av språket Rust har också skapats i fordonsföreningarna AUTOSAR (AUTomotive Open System ARchitecture) och SAE (Society of Automotive Engineers).
Кроме того, Дэвид Клейдермахер (David Kleidermacher), вице-президент Google по инжинирингу, рассказал о переводе на язык Rust кода, используемого в платформе Android для управления ключами шифрования, а также применении Rust в реализации протокола DNS over HTTPS, в стеке для UWB-чипов (Ultra-Wideband) и во вреймворке виртуализации (Android Virtualization Framework), связанном с чипом Tensor G2. Для Android также развиваются новые стеки для Bluetooth и Wi-Fi, переписанные на языке Rust. Общая стратегия заключается в постепенном усилении защиты вначале через перевод на использование Rust наиболее незащищённых и жизненно важных программных компонентов, а затем охватывая и другие связанные с ними подсистемы. В прошлом году язык Rust был включён в число языков, допустимых для разработки платформы Android.
Källa: opennet.ru
