Rust 1.68 Programming Language Release

Ang pagpapalabas ng Rust 1.68 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:

  • Ang Cargo package manager at ang crates.io repository ay nagpatatag ng suporta para sa Sparse protocol, na tumutukoy sa isang bagong paraan ng pagtatrabaho sa isang index na sumasalamin sa mga available na bersyon ng lahat ng mga package na umiiral sa repository. Ang bagong protocol ay nagbibigay-daan sa iyo upang makabuluhang taasan ang bilis ng pagtatrabaho sa crates.io at lutasin ang mga problema sa scaling na may karagdagang paglaki sa bilang ng mga pakete sa repositoryo.

    Upang mabawasan ang mga pagkaantala na dulot ng pag-download ng isang buong index, ang Sparse sa halip na i-access ang index gamit ang Git ay nagsasangkot ng direktang pag-download sa HTTPS lamang ng kinakailangang data ng index, na sumasaklaw sa mga dependency ng isang partikular na proyekto. Ang isang bagong serbisyo, index.crates.io, ay ginagamit upang magbigay ng index data. Bilang default, ang bagong protocol ay binalak na gamitin sa Rust 1.70 branch, at bago iyon, para paganahin ito, maaari mong itakda ang environment variable na "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" o idagdag ang 'protocol =' na parameter sa "[registries. crates-io]" na seksyon ng .cargo/config.toml file na 'sparse'.

  • Idinagdag ang macro na "pin!", na nagbibigay-daan sa iyong lumikha ng Pin<&mut T> structure mula sa expression na "T" na may lokal na pinning ng estado nito (hindi katulad ng Box::pin, hindi ito naglalaan ng memorya sa heap, ngunit nagbubuklod sa antas ng stack).
  • Ang isang default na memory allocation error handler ay iminungkahi, na ginagamit kapag ginagamit ang karaniwang alloc package. Ang mga application na nagpapagana lang ng alloc (walang std) ay tatawag na ngayon sa β€œpanic!” handler kapag nabigo ang memory allocation, na maaaring opsyonal na ma-intercept gamit ang β€œ#[panic_handler]”. Ang mga program na gumagamit ng std library ay patuloy na magpi-print ng impormasyon ng error sa stderr at mag-crash.
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • {core,std}::pin::pin!
    • impl Mula sa para sa {f32,f64}
    • std::path::MAIN_SEPARATOR_STR
    • impl DerefMut para sa PathBuf
  • Ang attribute na "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa VecDeque::new function.
  • Upang gumana sa Android platform, kailangan na ngayon ng hindi bababa sa NDK r25 (API 19), i.e. Ang minimum na sinusuportahang bersyon ng Android ay itinaas sa 4.4 (KitKat).
  • Ang ikatlong antas ng suporta ay ipinatupad para sa Sony PlayStation Vita platform (armv7-sony-vita-newlibeabihf). Ang ikatlong antas ay nagsasangkot ng pangunahing suporta, ngunit walang automated na pagsubok, paglalathala ng mga opisyal na build, at pag-verify ng code buildability.

Pinagmulan: opennet.ru

Magdagdag ng komento