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

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

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