Выпуск мовы праграмавання Rust 1.68

Апублікаваны рэліз мовы праграмавання агульнага прызначэння 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

Дадаць каментар