Rust 1.44 Programming Language Release

Nai-publish release ng system programming language Kalawang 1.44, na itinatag ng proyekto ng Mozilla. Nakatuon ang wika sa kaligtasan ng memorya, nagbibigay ng awtomatikong pamamahala ng memorya, at nagbibigay ng mga tool para sa pagkamit ng mataas na paralelismo sa gawain nang hindi gumagamit ng basurero at runtime.

Ang awtomatikong pamamahala ng memorya ng Rust ay nag-aalis ng mga error kapag nagmamanipula ng mga pointer at nagpoprotekta laban sa mga problemang nagmumula sa mababang antas ng pagmamanipula ng memorya, tulad ng pag-access sa isang rehiyon ng memorya pagkatapos na ito ay mapalaya, mga null pointer dereference, buffer overrun, atbp. 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.

Sa teksto ng anunsyo ng bagong release, ang mga developer ng Rust ay nasangkot sa pulitika at malinaw na tumanggi na mag-publish ng isang buong pagsusuri ng mga pagbabago sa Rust 1.44 bilang tanda ng pakikiisa sa mga nagpoprotesta laban sa karahasan ng pulisya, na nagpapahiwatig na ang isyung ito ay mas mahalaga. kaysa sa pagpapalitan ng kaalamang teknikal. Basic mga inobasyon:

  • Ang Cargo package manager ay isinasama ang command na "cargo tree", na nagpapakita ng isang tree-like dependency graph. Idinagdag din ang opsyong "—mga duplicate" ("cargo tree -d"), na nagbibigay-daan sa iyong suriin ang mga dependency sa iba't ibang bersyon ng parehong package.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── ammonia v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── log v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── markup5ever v0.9.0
    │ │ ├── log v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [build-dependencies] │ │ │ └── version_check v0.1.5
    ...

  • Para sa mga application na hindi nakatali sa isang std ("#![no_std]"), ang suporta para sa asynchronous programming techniques ay ipinatupad batay sa "async" function, ang async move { ... } block at ang ".await" operator, na kung saan pasimplehin ang pagsusulat ng mga hindi humaharang na humahawak sa pangunahing daloy ng utos.
  • Ang suporta para sa isang napapalawak na module hierarchy definition scheme ay naidagdag sa parser. Halimbawa, ang sumusunod na construct ay hindi gagawa ng error, sa kabila ng aktwal na kawalan ng module na "foo/bar/baz.rs" (ang construct ay semantically invalid pa rin at maaaring magdulot ng error, ngunit ang mga pagbabago ay makikita at ma-parse sa ang antas ng macro at conditional compilation):

    #[cfg(FALSE)] mod foo {
    mod bar {
    mod baz;
    }
    }

  • Ang rustc compiler ay nagdagdag ng kakayahang gamitin ang flag na "-C codegen-units" sa incremental mode. Ang pagpapatupad ng catch_unwind ay muling ginawa upang wala itong epekto sa pagganap kung ang proseso ng pag-unwinding ay hindi pinagana at walang mga pagbubukod na itinapon.
  • Ang level 64 na suporta ay ibinigay para sa mga platform ng aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos at x64_XNUMX-apple-tvos. Ang ikatlong antas ay nagsasangkot ng pangunahing suporta, ngunit walang awtomatikong pagsubok at paglalathala ng mga opisyal na build.
  • Isang bagong bahagi ng mga API ang inilipat sa stable na kategorya, kabilang ang stabilized
    PathBuf::with_capacity,
    PathBuf::kapasidad,
    PathBuf::malinaw,
    PathBuf::reserve,
    PathBuf::reserve_exact,
    PathBuf::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    Layout::align_to,
    Layout::pad_to_align,
    Layout::array at
    Layout::extend.

  • Mga pinahabang function ng karaniwang library:
    • Nagdagdag ng espesyal na variant na "vec![]" na direktang ipinapakita sa Vec::new(), na nagpapahintulot sa "vec![]" na gamitin sa konteksto sa halip na mga constant.
    • Ang isang pagpapatupad (impl) ng katangian ay naidagdag sa convert::Infallible Sumira.
    • Ang OsString ay nagpapatupad ng mga matalinong payo DerefMut и IndexMut, ibinabalik ang "&mut OsStr".
    • Nagdagdag ng suporta para sa Unicode 13.
    • Ipinatupad sa String Mula sa<&mut str>.
    • Ipinapatupad ng IoSlice ang katangian Kopyahin.
    • Vec ipinatupad Mula<[T; N]>.
    • proc_macro::Ang LexError ay nagpapatupad ng fmt::Display at Error.
  • Ang katangiang "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa mga pamamaraang from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes at to_ne_bytes para sa lahat ng uri ng integer.
  • Nagdagdag ng suporta para sa pagbuo ng mga static na aklatan sa ".a" na format sa halip na ".lib" para sa mga platform ng GNU sa Windows.
  • Ang mga minimum na kinakailangan para sa LLVM ay itinaas sa bersyon 8 ng LLVM.

Pinagmulan: opennet.ru

Magdagdag ng komento