Rust 1.61 Programming Language Release

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

  • Posibleng tukuyin ang iyong sariling mga return code mula sa pangunahing function. Sa orihinal, maibabalik lang ng pangunahing function ng Rust ang uri na "()" (unit), na palaging nagsasaad ng matagumpay na katayuan sa paglabas maliban kung tahasang tinawag ng developer ang function na "process::exit(code)". Sa Rust 1.26, gamit ang hindi matatag na katangian ng Pagwawakas sa pangunahing pag-andar, posible na ibalik ang mga halagang "Ok" at "Err", na tumutugma sa EXIT_SUCCESS at EXIT_FAILURE na mga code sa mga programang C. Sa Rust 1.61, ang Termination trait ay ginawang stable, at ang isang hiwalay na uri ng ExitCode ay iminungkahi upang kumatawan sa isang partikular na return code, na kumukuha ng mga uri ng return na partikular sa platform sa pamamagitan ng pagbibigay ng parehong paunang-natukoy na mga constant na SUCCESS at FAILURE, at ang From method. para magbalik ng custom na return code. gumamit ng std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } ExitCode::TAGUMPAY }
  • Ang mga karagdagang kakayahan ng mga function na tinukoy gamit ang expression na "const fn" ay na-stabilize, na maaaring tawaging hindi lamang bilang mga regular na function, ngunit ginagamit din sa anumang konteksto sa halip na mga constants. Ang mga function na ito ay kinakalkula sa oras ng pag-compile, hindi sa runtime, kaya napapailalim ang mga ito sa ilang mga paghihigpit, tulad ng kakayahang magbasa lamang mula sa mga constant. Sa bagong bersyon, ang mga pangunahing operasyon na may mga function pointer ay pinapayagan sa loob ng const function (paglikha, pagpasa at pag-cast ng mga pointer ay pinapayagan, ngunit hindi pagtawag ng isang function sa pamamagitan ng pointer); mga hangganan ng katangian para sa mga generic na parameter ng mga function ng const tulad ng T: Copy; dynamic na dispatchable na mga katangian (dyn Trait); impl Mga uri ng katangian para sa mga argumento ng function at mga halaga ng pagbabalik.
  • Ang stream ay humahawak ng Stdin, Stdout at Stderr sa std::io ay mayroon na ngayong static na panghabambuhay ("'static") kapag naka-lock, na nagbibigay-daan para sa mga construct tulad ng "let out = std::io::stdout().lock();" sa pagkuha ng hawakan at pagtatakda ng lock sa isang expression.
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Sumulat para sa Cursor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Pagwawakas
    • std::thread::JoinHandle::is_finished
  • Ang katangiang "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa mga function:
    • <*const T>::offset at <*mut T>::offset
    • <*const T>::wrapping_offset at <*mut T>::wrapping_offset
    • <*const T>::add at <*mut T>::add
    • <*const T>::sub at <*mut T>::sub
    • <*const T>::wrapping_add at <*mut T>::wrapping_add
    • <*const T>::wrapping_sub at <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Bilang karagdagan, maaari mong tandaan ang artikulong "Rust: A Critical Retrospective" na may buod ng mga impression ng Rust language pagkatapos magsulat ng 100 libong linya ng code dito sa panahon ng pagbuo ng Xous microkernel operating system na ginamit sa firmware. Kabilang sa mga disadvantage ang mahirap unawain na syntax, hindi kumpleto at patuloy na pag-unlad ng wika, kakulangan ng mga paulit-ulit na pagbuo, mga tipikal na problema sa pagtitiwala sa dependency sa Crates.io, at ang pangangailangang mapanatili ang isang partikular na disiplina sa pagsulat ng secure na code. Kasama sa mga feature na lumampas sa inaasahan ang mga tool para sa refactoring code at muling paggawa ng "mga hack" na idinagdag sa panahon ng mabilis na prototyping.

Pinagmulan: opennet.ru

Magdagdag ng komento