Rust 1.64 Programming Language Release

Ang pagpagawas sa Rust 1.64 nga kinatibuk-ang katuyoan nga programming language, nga gitukod sa proyekto sa Mozilla, apan karon naugmad ubos sa pagdumala sa independenteng non-profit nga organisasyon nga Rust Foundation, gimantala. Ang lengguwahe nagtutok sa kaluwasan sa panumduman ug naghatag sa mga paagi aron makab-ot ang taas nga paralelismo sa trabaho samtang naglikay sa paggamit sa usa ka tigkolekta sa basura ug runtime (ang runtime gikunhoran ngadto sa batakang pagsugod ug pagmentinar sa standard library).

Ang mga pamaagi sa pagdumala sa panumduman sa Rust nagluwas sa developer gikan sa mga sayup sa pagmaniobra sa mga pointer ug pagpanalipod batok sa mga problema nga motumaw tungod sa ubos nga lebel sa pagdumala sa panumduman, sama sa pag-access sa usa ka lugar sa panumduman human kini mapagawas, pagtangtang sa mga null pointer, pag-overrun sa buffer, ug uban pa. Sa pag-apod-apod sa mga librarya, paghatag og mga pagtukod ug pagdumala sa mga dependency, ang proyekto nagpalambo sa Cargo package manager. Gisuportahan ang crates.io repository alang sa pag-host sa mga librarya.

Ang kaluwasan sa panumduman gihatag sa Rust sa oras sa pag-compile pinaagi sa pagsusi sa reference, pagsubay sa pagpanag-iya sa butang, pagsubay sa mga kinabuhi sa butang (scopes), ug pagtimbang-timbang sa pagkahusto sa pag-access sa memorya sa panahon sa pagpatuman sa code. Naghatag usab ang Rust og proteksyon batok sa pag-awas sa integer, nanginahanglan mandatory nga pagsugod sa mga variable nga kantidad sa wala pa gamiton, pagdumala sa mga sayup nga mas maayo sa standard nga librarya, gipadapat ang konsepto sa dili mausab nga mga pakisayran ug mga variable nga default, nagtanyag kusog nga static nga pag-type aron maminusan ang mga lohikal nga sayup.

Panguna nga mga inobasyon:

  • Ang mga kinahanglanon alang sa Linux environment sa compiler, ang Cargo package manager ug ang libstd standard library nadugangan - ang minimum nga mga kinahanglanon alang sa Glibc gipataas gikan sa bersyon 2.11 ngadto sa 2.17, ug ang Linux kernel gikan sa bersyon 2.6.32 ngadto sa 3.2. Ang mga pagdili magamit usab sa Rust application executables nga gitukod gamit ang libstd. Ang mga distribution kits RHEL 7, SLES 12-SP5, Debian 8 ug Ubuntu 14.04 nagtagbo sa bag-ong mga kinahanglanon. Ang suporta alang sa RHEL 6, SLES 11-SP4, Debian 7 ug Ubuntu 12.04 ihunong. Ang mga tiggamit nga naggamit sa Rust-built executable sa mga palibot nga adunay daan nga Linux kernel giawhag sa pag-upgrade sa ilang mga sistema, pagpabilin sa mga daan nga pagpagawas sa compiler, o pagmentinar sa ilang kaugalingong libstd fork nga adunay mga layer aron mapadayon ang pagkaangay.

    Lakip sa mga hinungdan sa pagtapos sa suporta alang sa mas daan nga mga sistema sa Linux mao ang limitado nga mga kapanguhaan aron magpadayon sa pagpadayon sa pagkaangay sa mga daan nga palibot. Ang suporta alang sa kabilin nga Glibc nanginahanglan sa paggamit sa mga himan nga panulundon kung nagsusi sa usa ka padayon nga sistema sa panagsama, atubangan sa pagdugang nga mga kinahanglanon sa bersyon sa LLVM ug mga gamit sa cross-compilation. Ang pagtaas sa mga kinahanglanon sa bersyon sa kernel tungod sa katakus sa paggamit sa bag-ong mga tawag sa sistema sa libstd nga wala kinahanglana ang pagpadayon sa mga layer aron masiguro ang pagkaangay sa mga tigulang nga kernel.

  • Ang IntoFuture nga kinaiya gipalig-on, nga susama sa IntoIterator, apan lahi sa naulahi pinaagi sa paggamit sa ".naghulat" imbes nga "alang sa ... sa ..." mga galong. Kung gihiusa uban sa IntoFuture, ang ".naghulat" nga keyword makapaabut dili lamang sa usa ka Umaabut nga kinaiya, apan bisan unsang ubang mga tipo nga mahimong mabag-o sa usa ka Umaabut.
  • Ang rust-analyzer utility gilakip sa koleksyon sa mga utilities nga gihatag sa Rust releases. Ang utility magamit usab alang sa pag-instalar gamit ang rustup (rustup component add rust-analyzer).
  • Ang tagdumala sa pakete sa Cargo naglakip sa kabilin sa workspace aron mawagtang ang pagdoble sa kasagarang mga kantidad sa field tali sa mga pakete, sama sa Rust nga mga bersyon ug mga URL sa repository. Gidugang usab ang suporta alang sa pagtukod alang sa daghang mga target nga platform sa usa ka higayon (mahimo nimong ipiho ang labaw sa usa ka parameter sa kapilian nga "--target").
  • Usa ka bag-ong bahin sa API ang gibalhin sa kategorya nga stable, lakip ang mga pamaagi ug pagpatuman sa mga kinaiya nga na-stabilize:
    • umaabot::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • numero::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::nag-awas_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::proseso::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • C-compatible nga mga tipo, nga na-stabilize kaniadto sa std::ffi module, gidugang sa kinauyokan ug sa alloc library:
    • kinauyokan::ffi::CStr
    • kinauyokan::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Ang mga tipo sa C nga kaniadto na-stabilize sa std::os::raw nga module gidugang sa kinauyokan::ffi ug std::ffi modules (pananglitan, ang c_uint ug c_ulong nga mga tipo gisugyot alang sa uint ug ulong C nga mga tipo):
    • ffi::c_char
    • ffi::c_doble
    • 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 tagdumala sa ubos nga lebel gipalig-on para magamit sa mekanismo sa Poll (sa umaabot giplano nga maghatag usa ka gipasimple nga API nga wala magkinahanglan sa paggamit sa mga istruktura nga ubos ang lebel sama sa Pull ug Pin):

    • umaabot::poll_fn
    • buluhaton:: andam!
  • Ang "const" nga hiyas, nga nagtino sa posibilidad sa paggamit niini sa bisan unsang konteksto imbes nga mga constant, gigamit sa slice::from_raw_parts function.
  • Aron sa mas compact nga pagtipig sa datos, ang memory layout sa Ipv4Addr, Ipv6Addr, SocketAddrV4 ug SocketAddrV6 nga mga istruktura giusab. Mahimong adunay isyu sa pagkaangay sa usa ka pakete sa crate nga naggamit sa std::mem::transmute alang sa ubos nga lebel nga pagmaniobra sa mga istruktura.
  • Ang pagtukod sa rust compiler alang sa Windows platform naggamit sa PGO optimizations (profile-guided optimization), nga nagpaposible sa pagdugang sa performance sa pag-compile sa code sa 10-20%.
  • Gipatuman sa compiler ang usa ka bag-ong pasidaan bahin sa wala magamit nga mga natad sa pipila nga mga istruktura.

Dugang pa, mahimo nimong timan-an ang status report sa pagpalambo sa alternatibong pagpatuman sa Rust language compiler, nga giandam sa gccrs project (GCC Rust) ug giaprobahan para iapil sa GCC. Human sa pag-integrate sa frontend, ang standard nga GCC nga mga himan mahimong gamiton sa pag-compile sa mga programa sa Rust nga pinulongan nga dili kinahanglan nga i-install ang rustc compiler, nga gitukod gamit ang LLVM developments. Hangtud nga naa sa dalan ang pag-uswag, ug gipugngan ang bisan unsang wala damhang mga problema, ang Rust frontend i-integrate sa pagpagawas sa GCC 13 nga gikatakda sa Mayo sa sunod tuig. Ang pagpatuman sa GCC 13 sa Rust anaa sa beta status, wala pa ma-enable pinaagi sa default.

Source: opennet.ru

Idugang sa usa ka comment