Rust 1.64 Whakaputa Reo Papatono

Ko te tukunga o te reo hootaka kaupapa whanui Rust 1.64, i hangaia e te kaupapa Mozilla, engari kua whakawhanakehia inaianei i raro i te maru o te whakahaere kore-painga motuhake Rust Foundation, kua whakaputaina. Ko te reo e arotahi ana ki te haumaru mahara me te whakarato i nga huarahi ki te whakatutuki i te whakarara nui i roto i nga mahi mahi, me te karo i te whakamahi o te kaikohi paru me te wa mahi (ka whakahekehia te wa whakahaere ki te timatanga me te tiaki i te whare pukapuka paerewa).

Ko nga tikanga whakahaere mahara a Rust ka whakawātea i te kaiwhakawhanake mai i nga hapa raweke o te atatohu me te whakamarumaru mai i nga raru ka puta mai i te raweke mahara taumata-iti, penei i te urunga kore-kore, te kore tohu tohu kore, te paopao, me era atu. Ki te tohatoha whare pukapuka, ki te whakarite i te huihuinga me te whakahaere i nga whakawhirinakitanga, kei te whakawhanake te kaupapa i te kaiwhakahaere kete Uta. Kei te tautokohia te putunga crates.io mo te manaaki whare pukapuka.

Ka whakamanahia te haumaru mahara i roto i te Rust i te wa whakahiato ma te arowhai tohutoro, te whai mana o te taonga, te whakaaro mo te oranga o te ahanoa (scoping), me te arotake urunga mahara i te wa whakahaere. Ko te waikura hoki he whakamarumaru mai i nga puhaketanga integer, me arawhiti nga uara taurangi i mua i te whakamahi, he pai ake te whakahaere hapa i roto i te whare pukapuka paerewa, ka whakamahi taunoa i te kaupapa o nga tohutoro koretake me nga taurangi, me te tuku patopato pateko kaha hei whakaiti i nga hapa arorau.

Nga mahi hou:

  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Ρ‹ трСбования ΠΊ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ Linux Π² компиляторС, ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ Cargo ΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ libstd β€” ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ трСбования ΠΊ Glibc подняты с вСрсии 2.11 Π΄ΠΎ 2.17, Π° ядра Linux c вСрсии 2.6.32 Π΄ΠΎ 3.2. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Rust-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, собранных с libstd. Новым трСбованиям ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ дистрибутивы RHEL 7, SLES 12-SP5, Debian 8 ΠΈ Ubuntu 14.04. Π‘ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° RHEL 6, SLES 11-SP4, Debian 7 ΠΈ Ubuntu 12.04. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ собранныС инструмСнтариСм Rust исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Π² окруТСниях со старым ядром Linux, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ свои систСмы, ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π° старых выпусках компилятора ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ своё ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ libstd с прослойками для сохранСния совмСстимости.

    Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ прСкращСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ старых Linux-систСм ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ рСсурсы ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡŽ сопровоТдСния совмСстимости со старыми окруТСниями. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° старых Glibc Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования старого инструмСнтария ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π² систСмС Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, Π² условиях ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ вСрсиям Π² LLVM ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ… кросс-компиляции. ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ вСрсии ядра связано с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ использования Π² libstd Π½ΠΎΠ²Ρ‹Ρ… систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π±Π΅Π· нСобходимости поддСрТания прослоСк для обСспСчСния совмСстимости со старыми ядрами.

  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚ΠΈΠΏΠ°ΠΆ IntoFuture, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ IntoIterator, Π½ΠΎ отличаСтся ΠΎΡ‚ послСднСго использованиСм Β«.awaitΒ» вмСсто Ρ†ΠΈΠΊΠ»ΠΎΠ² Β«for … in …». Π’ сочСтании с IntoFuture ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«.awaitΒ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΠ°ΠΆ Future, Π½ΠΎ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Future.
  • Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° rust-analyzer Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² состав ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚, поставляСмой Π² выпусках Rust. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ доступа для установки ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ rustup (rustup component add rust-analyzer).
  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ Cargo Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ наслСдования Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ дублирования ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ вСрсии Rust ΠΈ URL Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π². Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сборки сразу для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ (Π² ΠΎΠΏΡ†ΠΈΠΈ Β«β€”targetΒ» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°).
  • Kua nekehia tetahi waahanga hou o te API ki te waahanga pumau, tae atu ki nga tikanga me nga whakatinanatanga o nga ahuatanga kua whakapumautia:
    • future::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
  • Π’ основной состав (core) ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ alloc Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π‘ΠΈ-совмСстимыС Ρ‚ΠΈΠΏΡ‹, Ρ€Π°Π½Π΅Π΅ стабилизированныС Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ std::ffi:
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Π’ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ core::ffi ΠΈ std::ffi Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π‘ΠΈ-Ρ‚ΠΈΠΏΡ‹, Ρ€Π°Π½Π΅Π΅ стабилизированныС Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ std::os::raw (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π‘ΠΈ-Ρ‚ΠΈΠΏΠΎΠ² uint ΠΈ ulong ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ Ρ‚ΠΈΠΏΡ‹ c_uint ΠΈ c_ulong):
    • 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
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ для использования с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Poll (Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ планируСтся ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½Ρ‹ΠΉ API, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… использования Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… структур Ρ‚ΠΈΠΏΠ° Pull ΠΈ Pin):

    • future::poll_fn
    • task::ready!
  • ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Β«constΒ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π² любом контСкстС вмСсто констант, ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ slice::from_raw_parts.
  • Π‘ Ρ†Π΅Π»ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° раскладка памяти структур Ipv4Addr, Ipv6Addr, SocketAddrV4 ΠΈ SocketAddrV6. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ совмСстимости с Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌΠΈ crate-ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ std::mem::transmute для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… манипуляций со структурами.
  • Π’ сборкС компилятора rust для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Windows задСйствованы PGO-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ (profile-guided optimization), позволившиС ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ компиляции ΠΊΠΎΠ΄Π° Π½Π° 10-20%.
  • Π’ компиляторС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… полях Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… структурах.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΎ состоянии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ компилятора языка Rust, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ gccrs (GCC Rust) ΠΈ ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π½ΠΎΠΉ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² состав GCC. ПослС ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ фронтэнда ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΉ инструмСнтарий GCC смоТСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС Rust Π±Π΅Π· нСобходимости установки компилятора rustc, построСнного с использованиСм Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ LLVM. Пока Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ΄Ρ‘Ρ‚ ΠΏΠΎ ΠΏΠ»Π°Π½Ρƒ ΠΈ Ссли Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, фронтэнд для языка Rust Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ Π² состав выпуска GCC 13, Π½Π°ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π° ΠΌΠ°ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π³ΠΎΠ΄Π°. РСализация Rust Π² GCC 13 Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ статус Π±Π΅Ρ‚Π°-вСрсии, ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Source: opennet.ru

Tāpiri i te kōrero