Апублікаваны рэліз мовы праграмавання агульнага прызначэння Rust 1.68, заснаванага праектам Mozilla, але цяпер які развіваецца пад заступніцтвам незалежнай некамерцыйнай арганізацыі Rust Foundation. Мова сфакусаваная на бяспечнай працы з памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэння стандартнай бібліятэкі).
Метады працы з памяццю ў Rust пазбаўляюць распрацоўніка ад памылак пры маніпуляванні паказальнікамі і абараняюць ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.
Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі, улік часу жыцця аб'ектаў (вобласці бачнасці) і адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.
Асноўныя навіны:
- У пакетным мэнэджары Cargo і рэпазітары crates.io стабілізаваная падтрымка пратаколу Sparse, вызначальнага новы спосаб працы з азначнікам, у якім адлюстраваны даступныя версіі ўсіх існых у рэпазітары пакетаў. Новы пратакол дазваляе істотна павысіць хуткасць працы з crates.io і вырашыць праблемы з маштабаваннем пры далейшым росце колькасці пакетаў у рэпазітары.
Для скарачэння затрымак, якія ўзнікаюць з-за загрузкі поўнага азначніка, у Sparse замест доступу да азначніка з выкарыстаннем Git задзейнічана прамая загрузка па HTTPS толькі неабходных індэксных дадзеных, якія ахопліваюць залежнасці пэўнага праекту. Для аддачы індэксных дадзеных задзейнічаны новы сервіс index.crates.io. Па змаўчанні новы пратакол плануюць задзейнічаць у галінцы Rust 1.70, а да гэтага для яго ўключэння можна ўсталяваць зменную асяроддзі "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" або дадаць у секцыю "[registries.crates-io]" файла .cargo/config.toml параметр 'protocol "sparse"'.
- Дададзены макрас "pin!", які дазваляе стварыць структуру Pin<&mut T> з выраза "T" з лакальным замацаваннем яго стану (у адрозненне ад Box::pin не вылучае памяць у кучы, а выконвае прывязку на ўзроўні стэка).
- Прапанаваны ужывальны па змаўчанні апрацоўшчык памылак размеркавання памяці, ужывальны пры выкарыстанні штатнага пакета alloc. Прыкладанні ў якіх уключаецца толькі alloc (без std) пры збоях вылучэння памяці з гэтага часу будуць выклікаць апрацоўшчык «panic!», які пры жаданні можа быць перахоплены пры дапамозе «#[panic_handler]». Праграмы, якія выкарыстоўваюць бібліятэку std, па-ранейшаму будуць выводзіць інфармацыю пра памылку ў stderr і аварыйна завяршаць выкананне.
- У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
- {core,std}::pin::pin!
- impl From for {f32,f64}
- std::path::MAIN_SEPARATOR_STR
- impl DerefMut для PathBuf
- Прыкмета "const", вызначальны магчымасць выкарыстання ў любым кантэксце замест канстант, ужыты ў функцыі VecDeque::new.
- Для працы на платформе Android зараз патрабуецца прынамсі NDK r25 (API 19), г.зн. мінімальная падтрымоўваная версія Android падвышаная да 4.4 (KitKat).
- Рэалізаваны трэці ўзровень падтрымкі для платформы Sony PlayStation Vita (armv7-sony-vita-newlibeabihf). Трэці ўзровень мае на ўвазе базавую падтрымку, але без аўтаматызаванага тэсціравання, публікацыі афіцыйных зборак і праверкі магчымасці зборкі кода.
Крыніца: opennet.ru