Rust 1.55 Programming Language Release

Ang paglabas ng system programming language na Rust 1.55, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng tangkilik ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Nakatuon ang wika sa kaligtasan ng memorya, nagbibigay ng awtomatikong pamamahala ng memorya, at nagbibigay ng paraan upang makamit ang mataas na parallelism ng gawain nang hindi gumagamit ng garbage collector o runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).

Ang awtomatikong pamamahala ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at pinoprotektahan laban sa mga problemang lumitaw dahil sa mababang antas ng pagmamanipula ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos itong 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.

Mga pangunahing inobasyon:

  • Ang Cargo package manager ay may kakayahang pagsamahin ang mga duplicate na error at babala na nangyayari sa panahon ng isang build. Kapag nagsasagawa ng mga command gaya ng "cargo test" at "cargo check --all-targets" na nagreresulta sa maraming build ng isang package na may iba't ibang parameter, ang user ay ipinapakita na ngayon ng buod ng paglitaw ng paulit-ulit na problema, sa halip na ipakita maramihang magkaparehong babala kapag paulit-ulit na binubuo ang parehong bagay. file. $ cargo +1.55.0 check β€”all-targets Pagsusuri ng foo v0.1.0 babala: hindi kailanman ginagamit ang function: 'foo' β€”> src/lib.rs:9:4 | 9 | fn foo() {} | ^^^ | = note: '#[warn(dead_code)]' ay naka-on bilang default na babala: 'foo' (lib) ay nakabuo ng 1 babala ng babala: 'foo' (lib test) ay nakabuo ng 1 babala (1 duplicate) Tapos na dev [unoptimized + debuginfo] target (s)sa 0.84s
  • Ang floating point parsing code sa karaniwang library ay inilipat upang gamitin ang mas mabilis at mas tumpak na Eisel-Lemire algorithm, na nalutas ang ilang dati nang naobserbahang problema sa pag-round at pag-parse ng mga numero na may napakalaking bilang ng mga digit.
  • Ang kakayahang tukuyin ang mga hindi nakasarang hanay sa mga template ay na-stabilize (β€œX..” ay binibigyang-kahulugan bilang isang hanay na nagsisimula sa halagang X at nagtatapos sa pinakamataas na halaga ng uri ng integer): itugma ang x bilang u32 { 0 => println! (β€œzero!”), 1.. => println!("positive number!"), }
  • Mga pinalawak na variant ng error na sakop ng std::io::ErrorKind (nag-uuri ng mga error sa mga kategorya gaya ng NotFound at WouldBlock). Dati, ang mga error na hindi nababagay sa mga kasalukuyang kategorya ay nahulog sa ErrorKind::Other na kategorya, na ginamit din para sa mga error sa third-party na code. Mayroon na ngayong hiwalay na panloob na ErrorKind::Uncategorized na kategorya para sa mga error na hindi umaangkop sa mga kasalukuyang kategorya, at ang ErrorKind::Other na kategorya ay limitado sa mga error na hindi nangyayari sa karaniwang library (standard library function na nagbabalik io::Error hindi na gumamit ng ErrorKind:: kategorya Iba pa).
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • Bound::clone
    • Alisan ng tubig::as_str
    • IntoInnerError::into_error
    • IntoInnerError::into_parts
    • MaybeUninit::assume_init_mut
    • MaybeUninit::assume_init_ref
    • SiguroUninit::magsulat
    • array::mapa
    • ops::ControlFlow
    • x86::_pinakabit
    • x86::_bittestandcomplement
    • x86::_bittestandreset
    • x86::_bittestandset
    • x86_64::_bittest64
    • x86_64::_bittestandcomplement64
    • x86_64::_bittestandreset64
    • x86_64::_bittestandset64
  • Ang attribute na "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa str::from_utf8_unchecked method.
  • Ang ikatlong antas ng suporta ay ipinatupad para sa powerpc64le-unknown-freebsd platform. 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