I-Rust 1.87 Ikhishwe

Ukugubha iminyaka eyishumi yolimi lwezinhlelo ze-Rust 1.0 (iphrojekthi ye-Rust yasungulwa ngo-2006, ukukhululwa kwe-0.1 kwasungulwa ngo-2012, futhi inguqulo yokuqala ezinzile yahlongozwa ngo-2015), i-Rust 1.87 ikhishwe. Ulimi lugxile ekuphepheni kwenkumbulo futhi luhlinzeka ngezindlela zokuzuza ukufana okuphezulu kokwenziwa komsebenzi, kuyilapho kwenziwa ngaphandle kokusetshenziswa komqoqi kadoti nesikhathi sokusebenza (isikhathi sokusebenza sincishiselwa ekuqaliseni okuyisisekelo nokugcinwa kokugcinwa komtapo wolwazi ojwayelekile).

Izindlela zokuphatha inkumbulo kaRust zisindisa unjiniyela emaphutheni lapho eshintsha izikhombi futhi avikele ezinkingeni eziphakama ngenxa yokuphatha inkumbulo esezingeni eliphansi, njengokufinyelela indawo yenkumbulo ngemva kokuba ikhululiwe, ukuhoxisa izikhombi ezingenalutho, ukugcwala kwebhafa, njll. Ukuze kusatshalaliswe imitapo yolwazi, ukuhlinzeka ngokwakha nokuphatha okuncikile, iphrojekthi ithuthukisa umphathi wephakheji ye-Cargo. Inqolobane ye-crates.io isekelwe ekusingatheni imitapo yolwazi.

Ukuphepha kwenkumbulo kunikezwa ku-Rust ngesikhathi sokuhlanganiswa ngokuhlolwa kwereferensi, ukulandelela ubunikazi bento, ukulandelela isikhathi sokuphila kwento (izikophu), nokuhlola ukulunga kokufinyelela inkumbulo ngesikhathi sokwenziwa kwekhodi. I-Rust iphinde inikeze isivikelo ekuchichimeni okuphelele, idinga ukuqaliswa okuyisibopho kwamanani ahlukahlukene ngaphambi kokusetshenziswa, iphatha amaphutha kangcono kulabhulali evamile, isebenzisa umqondo wezithenjwa ezingaguquleki nokuguquguqukayo ngokuzenzakalelayo, inikeza ukuthayipha okuqinile okuqinile ukuze kuncishiswe amaphutha anengqondo.

Okuqanjiwe okuyinhloko:

  • Ukusekelwa kwamapayipi angaziwa kwengezwe kulabhulali evamile. Indlela ye-std::io::pipe() ihlinzekelwe ukudala amapayipi angashiwongo, angasetshenziswa ngokuhambisana ne-std::process::Umyalo wokucubungula okokufaka okujwayelekile nokugelezayo kokuphumayo, kanye nokuhlanganisa ukusakaza kwe-stdout ne-stderr. sebenzisa std::process::Command; sebenzisa i-std::io::Funda; let (mut recv, send) = std::io::pipe()?; let mut command = Umyalo::new("indlela/eya/emgqomeni") // ukuhlanganisa i-stdout ne-stderr ibe isiteshi esisodwa .stdout(send.try_clone()?) .stderr(thumela) .spawn()?; let mut output = Vec ::new(); recv.read_to_end(&mut output)?; gomela!(command.wait()?.impumelelo());
  • Ukushayela iningi lemisebenzi eyakhelwe ngaphakathi yomhlanganisi (Intrinsics) ye-std::arch kusuka kukhodi ephephile kuvunyelwe. Ushintsho lusebenza emisebenzini eyakhelwe ngaphakathi ethi std::arch emakwe njengengaphephile kuphela ngenxa yokuthi iboshelwe ekusebenzeni okuthile, uma lokho kusebenza kunikwe amandla. Isibonelo, _mm256_add_epi32 ingabizwa ngekhodi ephephile uma uhlelo lokusebenza lisebenzisa '#[target_feature(enable = "avx2")]'.
  • Kusukela emabhuloki "asm!" Ikhodi yomhlangano ivunyelwe ukuthi ifake amabhlogo wekhodi ye-Rust, eyenza kube lula ukuthuthukiswa kwekhodi yezinga eliphansi, njengokusebenzisa ukulungiselelwa ku-kernel noma ukuhlela ukusebenzelana nehadiwe. Iphuzu lokugxuma lomyalo we-assembler "jmp" licaciswe ku-macro "asm!" usebenzisa "ilebula" entsha ye-operand equkethe inkulumo ethi block enekhodi yokugqwala. okungaphephile {asm!("jmp {}", ilebula { println!("Ugxume usuka ku-asm!"); }); }
  • Kuvunyelwe ukucacisa izinhlobo ezijwayelekile ezithwetshuliwe kanye nesikhathi sokuphila ngokucacile ezincazelweni zesici kusetshenziswa izinhlobo zokubuya kwe-impl Trait. i-trait Foo {fn method<'a>(&'a self) -> impl Usayizi; uhlobo olungacacile1<'a>: Usayizi; fn method_desugared<'a>(&'a self) -> Self::Implicit1<'a>; fn precise<'a>(&'a self) -> impl Usayizi + ukusetshenziswa ; uhlobo Okucacile2: Usayizi; fn precise_desugared<'a>(&'a self) -> Self::Implicit2; }
  • Ingxenye entsha ye-API iyiswe esigabeni sokuzinza, okuhlanganisa izindlela nokusetshenziswa kwezimpawu kuzinzile:
    • I-Vec::khipha_uma
    • vec::KhiphaUma
    • Uhlu Oluxhunyiwe::khipha_uma
    • linked_list::ExtractIf
    • <[T]>::split_off
    • <[T]>::split_off_mut
    • <[T]>::split_off_first
    • <[T]>::split_off_first_mut
    • <[T]>::split_off_last
    • <[T]>::split_off_last_mut
    • Iyunithi yezinhlamvu::nweba_kusuka_ngaphakathi
    • os_str::Display
    • OsString::bonisa
    • I-OsStr::isibonisi
    • io ::ipayipi
    • io::PipeReader
    • io::PipeWriter
    • impl Kusuka okwe-OwnedHandle
    • impl Kusuka okwe-OwnedHandle
    • impl Kusuka kwe-Stdio
    • impl Kusuka kwe-Stdio
    • impl Kusuka okwe-OwnedFd
    • impl Kusuka okwe-OwnedFd
    • Ibhokisi >::bhala
    • impl TryFrom > for String
    • <*const T>::offset_from_unsigned
    • <*const T>::byte_offset_from_unsigned
    • <*mut T>::offset_from_unsigned
    • <*mut T>::byte_offset_from_unsigned
    • I-Nonnull::offset_from_unsigned
    • I-NonNnull::byte_offset_from_unsigned
    • ::isayiniwe_sayiniwe
    • I-NonZero:: ::isayiniwe_sayiniwe.
    • ::cast_akusayiniwe.
    • I-NonZero:: ::cast_akusayiniwe.
    • ::kuningi_kwa
    • ::unbounded_shl
    • ::shr_unbounded
    • ::unbounded_shl
    • ::shr_unbounded
    • ::indawo ephakathi
    • ::kusuka_utf8
    • ::kusuka_utf8_mut
    • ::kusuka_utf8_akuhloliwe
    • ::kusuka_ku-utf8_okungahloliwe_mut
  • Uphawu "const" lusetshenziswa emisebenzini:
    • core::str::from_utf8_mut
    • <[T]>::copy_from_slice
    • I-SocketAddr::set_ip
    • I-SocketAddr::set_port,
    • I-SocketAddrV4::set_ip
    • I-SocketAddrV4::set_port,
    • I-SocketAddrV6::set_ip
    • I-SocketAddrV6::set_port
    • I-SocketAddrV6::set_flowinfo
    • I-SocketAddrV6::set_scope_id
    • inombolo::yidijithi_
    • char::is_whitespace
    • <N::as_flattened
    • <N::as_flattened_mut
    • Iyunithi yezinhlamvu::kumabhayithi
    • Iyunithi yezinhlamvu::njengoba_str
    • Uchungechunge::umthamo
    • Iyunithi yezinhlamvu::njengamabhayithi
    • Intambo::len
    • Iyunithi yezinhlamvu::ayinalutho
    • Uchungechunge::as_mut_str
    • Iyunithi yezinhlamvu::as_mut_vec
    • Vec::as_ptr
    • I-Vec::njengocezu
    • Vec::umthamo
    • Vec::len
    • I-Vec::ayinalutho
    • Vec::as_mut_piece
    • I-Vec::as_mut_ptr
  • Kukhishwe izinga lesibili losekelo lweplathifomu yethagethi ye-i586-pc-windows-msvc. Kunconywa ukusebenzisa iplathifomu ye-i686-pc-windows-msvc, efaka ukusekelwa kwemiyalelo ye-SSE2. Iplathifomu ye-i586-pc-windows-msvc ayisasebenziseki ngoba Windows 10 idinga ukwesekwa kwe-SSE2, futhi ukukhishwa kwangaphambilini kweWindows akusekelwa ku-Rust.

Source: opennet.ru

Engeza amazwana