Rust 1.65 Programming Language Release

Ang pagpapalabas ng Rust 1.65 general-purpose programming language, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng auspice ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Nakatuon ang wika sa kaligtasan ng memorya at nagbibigay ng paraan upang makamit ang mataas na parallelism sa trabaho habang iniiwasan ang paggamit ng isang basurero at runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).

Ang mga paraan ng pangangasiwa ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at nagpoprotekta laban sa mga problemang lumitaw dahil sa mababang antas ng paghawak ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos na ito ay mapalaya, pag-derefer ng mga null pointer, pag-overrun ng buffer, atbp. Upang ipamahagi ang mga aklatan, magbigay ng mga build at pamahalaan ang mga dependency, bubuo ang proyekto ng Cargo package manager. Ang crates.io repository ay suportado para sa pagho-host ng mga aklatan.

Ang kaligtasan ng memorya ay ibinibigay sa Rust sa oras ng pag-compile sa pamamagitan ng pagsuri sa sanggunian, pagsubaybay sa pagmamay-ari ng bagay, pagsubaybay sa mga buhay ng bagay (mga saklaw), at pagtatasa ng kawastuhan ng pag-access sa memorya sa panahon ng pagpapatupad ng code. Nagbibigay din ang kalawang ng proteksyon laban sa mga overflow ng integer, nangangailangan ng mandatoryong pagsisimula ng mga variable na halaga bago gamitin, mas mahusay na pinangangasiwaan ang mga error sa karaniwang library, inilalapat ang konsepto ng hindi nababagong mga sanggunian at mga variable bilang default, nag-aalok ng malakas na static na pag-type upang mabawasan ang mga lohikal na error.

Mga pangunahing inobasyon:

  • Nagdagdag ng suporta para sa mga generic na nauugnay na uri (GAT, Generic Associated Types), na ginagawang posible na lumikha ng mga uri ng alias na nauugnay sa isa pang uri at nagbibigay-daan sa iyong iugnay ang mga type constructor sa mga katangian. katangian Foo { type Bar<'x>; }
  • Naipatupad na ang expression na "hayaan ... else", na nagbibigay-daan sa iyong suriin ang kundisyon ng pagtutugma ng pattern nang direkta sa loob ng expression na "hayaan" at magsagawa ng arbitrary na code kung hindi tumutugma ang pattern. let Ok(count) = u64::from_str(count_str) else { panic!("Hindi ma-parse ang integer: '{count_str}'"); };
  • Pahintulutan ang paggamit ng pahayag ng break na lumabas nang maaga sa mga pinangalanang block, gamit ang block name (label) upang matukoy ang block na wawakasan. let result = 'block: { do_thing(); if condition_not_met() { break 'block 1; } do_next_thing(); if condition_not_met() { break 'block 2; } do_last_thing(); 3};
  • Para sa Linux, ang kakayahang hiwalay na i-save ang impormasyon sa pag-debug (split-debuginfo), na dating magagamit lamang para sa macOS platform, ay naidagdag. Kapag tinukoy ang opsyong "-Csplit-debuginfo=unpacked", ang data ng debuginfo sa format na DWARF ay ise-save sa ilang hiwalay na object file na may extension na ".dwo". Ang pagtukoy sa "-Csplit-debuginfo=packed" ay lilikha ng isang pakete sa ".dwp" na format na kinabibilangan ng lahat ng data ng debuginfo para sa proyekto. Upang direktang isama ang debuginfo sa seksyong .debug_* ng mga ELF object, maaari mong gamitin ang opsyong "-Csplit-debuginfo=off".
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • std::backtrace::Backtrace
    • Bound::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • Ang attribute na "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa mga function <*const T&>::offset_from at <*mut T>::offset_from
  • Bilang bahagi ng huling yugto ng paglilipat ng pagpapatupad ng LSP (Language Server Protocol) protocol sa rust-analyzer, ang hindi napapanahong pagpapatupad ng Rust Language Server (RLS) ay pinalitan ng isang stub server na naglalabas ng babala na may mungkahi na lumipat sa gamit ang rust-analyzer.
  • Sa panahon ng compilation, pinagana ang suporta para sa inline na pag-deploy ng MIR intermediate code, na nagpapabilis sa pagsasama-sama ng mga tipikal na crate package ng 3-10%.
  • Para mapabilis ang mga naka-iskedyul na build, ang Cargo package manager ay nagbibigay ng pag-uuri ng mga trabahong naghihintay ng pagpapatupad sa pila.

Bilang karagdagan, maaari mong tandaan ang panayam tungkol sa paggamit ng Rust na wika sa Volvo upang bumuo ng mga bahagi ng mga sistema ng impormasyon sa sasakyan. Walang mga plano na muling isulat ang umiiral at nasubok na code sa Rust, ngunit para sa bagong code, ang Rust ay isa sa mga ginustong opsyon para sa pagpapabuti ng kalidad sa mas mababang gastos. Ang mga nagtatrabaho na grupo na may kaugnayan sa paggamit ng Rust na wika ay nilikha din sa mga automotive associations na AUTOSAR (AUTomotive Open System ARchitecture) at SAE (Society of Automotive Engineers).

Bilang karagdagan, si David Kleidermacher, ang vice president ng engineering ng Google, ay nagsalita tungkol sa pagsasalin ng code na ginamit sa Android platform para pamahalaan ang mga encryption key sa Rust, pati na rin ang paggamit ng Rust sa pagpapatupad ng DNS sa HTTPS protocol sa stack para sa UWB- chips (Ultra-Wideband) at sa virtualization framework (Android Virtualization Framework) na nauugnay sa Tensor G2 chip. Ang mga bagong stack para sa Bluetooth at Wi-Fi, na muling isinulat sa Rust, ay ginagawa rin para sa Android. Ang pangkalahatang diskarte ay unti-unting palakasin ang seguridad, una sa pamamagitan ng pag-convert ng mga pinaka-mahina at mahahalagang bahagi ng software sa Rust, at pagkatapos ay pagpapalawak sa iba pang nauugnay na mga subsystem. Noong nakaraang taon, ang Rust na wika ay kasama sa listahan ng mga wikang pinapayagan para sa pagbuo ng Android platform.

Pinagmulan: opennet.ru

Magdagdag ng komento