Rust 1.62 Programming Language Release

Ang pagpapalabas ng Rust 1.62 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 ay nag-aalok ng "add" command, na nagbibigay-daan sa iyong magdagdag ng mga bagong dependencies sa Cargo.toml manifest o baguhin ang mga umiiral na dependencies mula sa command line. Binibigyang-daan ka rin ng command na tukuyin ang mga indibidwal na feature at bersyon, halimbawa: cargo add serde β€”features derive cargo add nom@5
  • Idinagdag ang kakayahang gumamit ng β€œ#[derive(Default)]” na may mga enum kung saan ang default na opsyon ay tinukoy gamit ang attribute na β€œ#[default]”. #[derive(Default)] enum Siguro { #[default] Wala, Something(T), }
  • Sa platform ng Linux, ginagamit ang isang mas compact at mas mabilis na pagpapatupad ng mekanismo ng pag-synchronize ng Mutex, batay sa paggamit ng mga futex na ibinigay ng Linux kernel. Hindi tulad ng dating ginamit na pagpapatupad batay sa pthreads library, ang bagong bersyon ay gumagamit lamang ng 5 byte sa halip na 40 upang iimbak ang Mutex state. Katulad nito, ang Condvar at RwLock locking mechanism ay inilipat sa futex.
  • Ang pangalawang antas ng suporta para sa x86_64-unknown-none target na platform ay ipinatupad, na idinisenyo upang bumuo ng mga executable na file na maaaring gumana nang walang operating system. Halimbawa, maaaring gamitin ang tinukoy na target na platform kapag nagsusulat ng mga bahagi ng kernel. Ang pangalawang antas ng suporta ay nagsasangkot ng garantiya ng pagpupulong.
  • Ang ikatlong antas ng suporta ay ipinatupad para sa aarch64-pc-windows-gnullvm at x86_64-pc-windows-gnullvm platform. Ang ikatlong antas ay nagsasangkot ng pangunahing suporta, ngunit walang awtomatikong pagsubok, pag-publish ng mga opisyal na build, o pagsuri kung ang code ay maaaring buuin.
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • bool::then_some
    • f32::kabuuang_cmp
    • f64::kabuuang_cmp
    • Stdin::mga linya
    • windows::CommandExt::raw_arg
    • impl default na halaga para sa AssertUnwindSafe
    • Mula sa > para sa Rc
    • Mula sa > para sa Arc<[u8]>
    • FusedIterator para sa EncodeWide

    Pinagmulan: opennet.ru

Magdagdag ng komento