Rust 1.36 Programming Language Release

Nai-publish release ng system programming language Kalawang 1.36, itinatag ng proyekto ng Mozilla. Nakatuon ang wika sa kaligtasan ng memorya, nagbibigay ng awtomatikong pamamahala ng memorya, at nagbibigay ng paraan upang makamit ang mataas na paralelismo sa gawain nang hindi gumagamit ng basurero o runtime.

Ang awtomatikong pamamahala ng memorya ng Rust ay nagpapalaya sa developer mula sa pagmamanipula ng pointer at pinoprotektahan laban sa mga problemang nagmumula sa mababang antas ng pagmamanipula ng memorya, tulad ng mga after-free na pag-access sa memorya, null pointer dereferences, buffer overruns, at iba pa. Ang isang manager ng package ay binuo upang ipamahagi ang mga aklatan, tiyakin ang pagpupulong at pamahalaan ang mga dependency ng proyekto. Karga, na nagbibigay-daan sa iyong makuha ang mga aklatan na kailangan para sa programa sa isang pag-click. Sinusuportahan ang isang repository upang mag-host ng mga aklatan crates.io.

Ang pangunahing mga inobasyon:

  • Nag-stabilize ang ugali Hinaharap, na kumakatawan sa isang halaga na ang pagsusuri ay maaaring hindi pa nakumpleto habang gumagamit ng async / .await blocks. Ang mga asynchronous na halaga na tinukoy gamit ang Hinaharap ay ginagawang posible na magpatuloy sa pagpapatupad ng kapaki-pakinabang na gawain sa thread, habang sabay na naghihintay para sa pagkumpleto ng mga kalkulasyon ng isang tiyak na halaga;
  • Nag-stabilize ang library alloc, na nagbibigay ng mga matalinong pointer at koleksyon para sa pamamahala ng mga halagang inilalaan ng memorya. Ginagamit na ngayon ng paglalaan ng memorya sa std ang uri Isang bagay, na muling na-export mula sa alloc. Ang hiwalay na paggamit ng alloc ay may katuturan sa mga application na hindi nakatali sa std (β€œ#![no_std]”), gayundin sa mga library na idinisenyo para gamitin sa mga katulad na program na walang std;
  • Upang i-bypass ang mga pagsusuri para sa tamang pagsisimula ng mga halaga iminungkahi intermediate type SiguroUnit, na maaaring gamitin sa halip na mem::uninitialized function bilang isang mas ligtas na alternatibo. Ang mem::uninitialized function ay maginhawa para sa mabilis na paglikha ng mga array, ngunit nililinlang nito ang compiler dahil mukhang nag-initialize ito, ngunit sa katotohanan ang value ay nananatiling uninitialized. Pinapayagan ka ng MaybeUninit na tahasang ipahiwatig sa compiler na ang halaga ay hindi nasimulan, upang isaalang-alang ang posibleng hindi natukoy na pag-uugali na nauugnay dito, at gayundin upang ayusin ang mga pagsusuri sa mga programa sa pamamagitan ng "maybe_t:" at sunud-sunod na pagsisimula, na minarkahan ang pagkumpleto nito gamit ang ".assume_init()" na tawag. Sa pagdating ng MaybeUninit, ang mem::uninitialized function ay hindi na ginagamit at hindi inirerekomenda para sa paggamit;
  • Ang pamamaraan ng NLL (Non-Lexical Lifetimes), na nagpalawak ng system para sa pagtatala ng haba ng buhay ng mga hiniram na variable, ay na-stabilize para sa Rust 2015 na wika (sa una, ang NLL ay suportado lamang ng Rust 2018). Sa halip na gumawa ng mga habambuhay sa antas ng leksikal, ginagawa ito ng NLL sa antas ng hanay ng mga pointer sa graph ng daloy ng pagpapatupad. Ang diskarte na ito ay nagbibigay-daan sa iyo upang madagdagan ang kalidad ng pagsuri sa paghiram ng mga variable (hiram ng checker) at payagan ang pagpapatupad ng ilang mga uri ng tamang code, ang paggamit na dati ay humantong sa isang error. Ang bagong pag-uugali ay nagpapadali din sa pag-debug;
  • Kasama ang bagong pagpapatupad ng mga associative array HashMap, batay sa aplikasyon ng istraktura Swiss Table (awtomatikong na-load hashbrown::HashMap, maliban kung tahasang sinabi, tulad ng std::HashMap, na batay sa SipHash 1-3). Ang interface ng software ay nananatiling pareho, at ang mga pagkakaiba na kapansin-pansin sa developer ay bumagsak sa mas mataas na pagganap at nabawasan ang pagkonsumo ng memorya;
  • Sa kargamento ng manager ng package idinagdag ang opsyong "--offline", na nagbibigay-daan sa pagpapatakbo nang hindi ina-access ang network, kung saan ang mga pakete lamang na naka-cache sa lokal na sistema ang ginagamit kapag nag-i-install ng mga dependency. Kung ang dependency ay wala sa lokal na cache, isang error ang itatapon. Upang i-preload ang mga dependency sa lokal na cache bago mag-offline, maaari mong gamitin ang command na "cargo fetch";
  • Ipinatupad ang kakayahang tawagan ang macro na "dbg!" na nagpapahiwatig ng ilang mga argumento;
  • Ang katangiang "const", na tumutukoy sa posibilidad ng paggamit sa anumang konteksto sa halip na mga constant, ay ginagamit para sa mga pamamaraan
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::nakabitin at
    NonNull::cast;

  • Ang isang bagong bahagi ng mga API ay inilipat sa stable na kategorya, kabilang ang mga pamamaraan na na-stabilize
    gawain::Waker, gawain::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Basahin::read_vectored, Write::write_vectored,
    Iterator::kopya,
    BorrowMut (para sa mga string) at str::as_mut_ptr.

Pinagmulan: opennet.ru

Magdagdag ng komento