Апублікаваны рэліз мовы праграмавання агульнага прызначэння Rust 1.62, заснаванага праектам Mozilla, але цяпер які развіваецца пад заступніцтвам незалежнай некамерцыйнай арганізацыі Rust Foundation. Мова сфакусаваная на бяспечнай працы з памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэння стандартнай бібліятэкі).
Метады працы з памяццю ў Rust пазбаўляюць распрацоўніка ад памылак пры маніпуляванні паказальнікамі і абараняюць ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.
Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі, улік часу жыцця аб'ектаў (вобласці бачнасці) і адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.
Асноўныя навіны:
- У пакетным мэнэджары "cargo" прапанавана каманда "add", якая дазваляе з каманднага радка дадаваць у маніфест Cargo.toml новыя залежнасці ці змяняць наяўныя залежнасці. Каманда таксама дазваляе ўказваць асобныя ўласцівасці (feature) і версіі, напрыклад: cargo add serde -features derive cargo add nom@5
- Дададзена магчымасць выкарыстання "#[derive(Default)]" з пералічэннямі (enum), у якіх пры дапамозе атрыбута "#[default]" вызначаны варыянт па змаўчанні. #[derive(Default)] enum Maybe { #[default] Nothing, Something(T), }
- На платформе Linux задзейнічана больш кампактная і хуткая рэалізацыя механізму сінхранізацыі Mutex, заснаваная на ўжыванні фьютэксаў, якія прадстаўляюцца ядром Linux. У адрозненне ад раней выкарыстоўванай рэалізацыі на базе бібліятэкі pthreads, для захоўвання стану Mutex у новым варыянце расходуецца ўсяго 5 байт замест 40. Аналагічна на futex перакладзены механізмы блакіровак Condvar і RwLock.
- Рэалізаваны другі ўзровень падтрымкі мэтавай платформы x86_64-unknown-none, прызначанай для фармавання выкананых файлаў, здольных працаваць без аперацыйнай сістэмы. Напрыклад, паказаная мэтавая платформа можа выкарыстоўвацца пры напісанні кампанентаў ядра. Другі ўзровень падтрымкі мае на ўвазе гарантыю зборкі.
- Рэалізаваны трэці ўзровень падтрымкі для платформаў aarch64-pc-windows-gnullvm і x86_64-pc-windows-gnullvm. Трэці ўзровень мае на ўвазе базавую падтрымку, але без аўтаматызаванага тэсціравання, публікацыі афіцыйных зборак і праверкі магчымасці зборкі кода.
- У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
- bool::then_some
- f32::total_cmp
- f64::total_cmp
- Stdin::lines
- windows::CommandExt::raw_arg
- impl значэнне па змаўчанні для AssertUnwindSafe
- From > for Rc
- From > для Arc<[u8]>
- FusedIterator для EncodeWide
Крыніца: opennet.ru