Rust 1.64 Programming Language Release

Ang pagpapalabas ng Rust 1.64 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 mga kinakailangan para sa Linux environment sa compiler, ang Cargo package manager at ang libstd standard library ay nadagdagan - ang mga minimum na kinakailangan para sa Glibc ay itinaas mula sa bersyon 2.11 hanggang 2.17, at ang Linux kernel mula sa bersyon 2.6.32 hanggang 3.2. Nalalapat din ang mga paghihigpit sa mga executable ng Rust application na binuo gamit ang libstd. Ang mga distribution kit na RHEL 7, SLES 12-SP5, Debian 8 at Ubuntu 14.04 ay nakakatugon sa mga bagong kinakailangan. Ang suporta para sa RHEL 6, SLES 11-SP4, Debian 7 at Ubuntu 12.04 ay ihihinto. Ang mga user na gumagamit ng Rust-built executable sa mga environment na may mas lumang Linux kernel ay hinihikayat na i-upgrade ang kanilang mga system, manatili sa mga mas lumang release ng compiler, o panatilihin ang kanilang sariling libstd fork na may mga layer upang mapanatili ang compatibility.

    Kabilang sa mga dahilan para wakasan ang suporta para sa mas lumang mga sistema ng Linux ay limitado ang mga mapagkukunan upang patuloy na mapanatili ang pagiging tugma sa mas lumang mga kapaligiran. Ang suporta para sa legacy na Glibc ay nangangailangan ng paggamit ng mga legacy na tool kapag tumitingin sa isang tuluy-tuloy na sistema ng pagsasama, sa harap ng pagtaas ng mga kinakailangan sa bersyon sa LLVM at mga cross-compilation na utility. Ang pagtaas sa mga kinakailangan sa bersyon ng kernel ay dahil sa kakayahang gumamit ng mga bagong tawag sa system sa libstd nang hindi kinakailangang magpanatili ng mga layer upang matiyak ang pagiging tugma sa mas lumang mga kernel.

  • Ang IntoFuture trait ay na-stabilize, na kahawig ng IntoIterator, ngunit naiiba sa huli sa pamamagitan ng paggamit ng ".await" sa halip na "para sa ... sa ..." na mga loop. Kapag isinama sa IntoFuture, ang ".await" na keyword ay maaaring umasa hindi lamang ng isang katangian sa Hinaharap, kundi pati na rin sa anumang iba pang mga uri na maaaring ma-convert sa isang Hinaharap.
  • Ang rust-analyzer utility ay kasama sa koleksyon ng mga utility na ibinigay kasama ng Rust release. Ang utility ay magagamit din para sa pag-install gamit ang rustup (rustup component magdagdag ng rust-analyzer).
  • Ang Cargo package manager ay kinabibilangan ng workspace inheritance para alisin ang pagdoble ng mga karaniwang field value sa pagitan ng mga package, gaya ng Rust na bersyon at repository URL. Nagdagdag din ng suporta para sa pagbuo para sa ilang target na platform nang sabay-sabay (maaari mo na ngayong tukuyin ang higit sa isang parameter sa opsyong "--target").
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • hinaharap::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Ang mga uri ng C-compatible, na dating na-stabilize sa std::ffi module, ay naidagdag sa core at sa alloc library:
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Ang mga uri ng C na dating na-stabilize sa std::os::raw na module ay naidagdag sa core::ffi at std::ffi modules (halimbawa, ang mga uri ng c_uint at c_ulong ay iminungkahi para sa mga uri ng uint at ulong C):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Ang mga humahawak sa mababang antas ay na-stabilize para magamit sa mekanismo ng Poll (sa hinaharap ay pinlano na magbigay ng pinasimple na API na hindi nangangailangan ng paggamit ng mga istrukturang mababa ang antas tulad ng Pull at Pin):

    • hinaharap::poll_fn
    • gawain::handa na!
  • Ang attribute na "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa slice::from_raw_parts function.
  • Upang mas compact na mag-imbak ng data, binago ang memory layout ng Ipv4Addr, Ipv6Addr, SocketAddrV4 at SocketAddrV6 structures. Maaaring may isyu sa compatibility sa mga single crate package na gumagamit ng std::mem::transmute para sa mababang antas ng pagmamanipula ng mga istruktura.
  • Ang build ng rust compiler para sa Windows platform ay gumagamit ng PGO optimizations (profile-guided optimization), na naging posible upang mapataas ang pagganap ng code compilation ng 10-20%.
  • Ang compiler ay nagpatupad ng bagong babala tungkol sa mga hindi nagamit na field sa ilang partikular na istruktura.

Bukod pa rito, maaari mong tandaan ang ulat ng status sa pagbuo ng isang alternatibong pagpapatupad ng Rust language compiler, na inihanda ng gccrs project (GCC Rust) at naaprubahan para maisama sa GCC. Pagkatapos isama ang frontend, maaaring gamitin ang mga karaniwang tool ng GCC upang mag-compile ng mga programa sa wikang Rust nang hindi kailangang i-install ang rustc compiler, na binuo gamit ang mga pagpapaunlad ng LLVM. Hangga't ang pag-unlad ay nasa track, at humahadlang sa anumang hindi inaasahang mga problema, ang Rust frontend ay isasama sa paglabas ng GCC 13 na naka-iskedyul para sa Mayo sa susunod na taon. Ang pagpapatupad ng GCC 13 ng Rust ay nasa beta status, hindi pa pinapagana bilang default.

Pinagmulan: opennet.ru

Magdagdag ng komento