Rust 1.40 Whakaputa Reo Papatono

whakaputaina te tuku reo hootaka punaha Rust 1.40, i hangaia e te kaupapa Mozilla. Ka arotahi te reo ki te haumaru mahara, ka whakarato i te whakahaere mahara aunoa, ka whakarato taputapu mo te whakatutuki i te whakarara mahi teitei me te kore e whakamahi i te kaikohi paru me te waahi.

Ma te whakahaere mahara aunoa a Rust ka wetekina te kaiwhakawhanake mai i te raweke i te atatohu me te whakamarumaru i nga raru ka puta mai i te raweke mahara taumata-iti, penei i te uru mahara kore-muri, te kore tohu tohu kore, te paopao, me era atu. Kei te whakawhanakehia he kaiwhakahaere mokihi hei tohatoha whare pukapuka, hei whakarite i te huihuinga me te whakahaere i nga whakawhirinakitanga a te kaupapa. utanga, ka taea e koe te tiki i nga whare pukapuka e hiahiatia ana mo te kaupapa i te paato kotahi. Ka tautokohia he putunga hei manaaki i nga whare pukapuka crates.io.

Main nga mahi auaha:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ структур (struct) ΠΈ пСрСчислСний (enum c Π±Π»ΠΎΠΊΠΎΠΌ Variant) ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Β«#[non_exhaustive]Β«, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ āhei te reira Π² дальнСйшСм Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ поля ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ структуры ΠΈ пСрСчислСния. НапримСр, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… структуры с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ полями, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«#[non_exhaustive]Β» для ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ структур, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ. Π”ΠΎ сих ΠΏΠΎΡ€ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ситуации Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ Π±Ρ‹Π» Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ объявлСниСм ΠΏΠΎΠ»Π΅ΠΉ ΠΈ привязкой ΠΊ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΌΡƒ списку ΠΏΠΎΠ»Π΅ΠΉ. Новый Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ снимаСт Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈ позволяСт Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ поля Π±Π΅Π· риска Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π½Π΅Π΅ собранного внСшнСго ΠΊΠΎΠ΄Π°. Π’ crate-ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΏΡ€ΠΈ сопоставлСниях Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π² сСкции Β«matchΒ» трСбуСтся явноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ маски Β«_ => {…}Β», ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ поля, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ошибка.
  • Kua tapirihia Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ макроса mac!() Π² контСкстС Ρ‚ΠΈΠΏΠ°. НапримСр, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Β«type Foo = expand_to_type!(bar);Β», Ссли Β«expand_to_typeΒ» ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ макрос.
  • Π’ Π±Π»ΠΎΠΊΠ°Ρ… Β«extern { … }Β» tāpirihia Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½Ρ‹Ρ… макросов, Π² Ρ‚ΠΎΠΌ числС макросов Β«bang!()Β», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    macro_rules! make_item { ($name:ident) => { fn $name(); } }

    extern {
    make_item!(alpha);
    make_item!(beta);
    }

    extern Β«CΒ» {
    #[my_identity_macro] fn foo();
    }

  • Π’ макросах whakatinana Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ элСмСнтов Β«macro_rules!Β». ГСнСрация Β«macro_rules!Β» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΊΠ°ΠΊ Π² Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ макросах (Β«mac!()Β»), Ρ‚Π°ΠΊ ΠΈ Π² макросах Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² (Β«#[mac]Β»).
  • Π’ элСмСнтС сопоставлСния $m:meta tāpirihia ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ пСрСчислСний Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² (Β«[TOKEN_STREAM]Β», Β«{TOKEN_STREAM}Β» ΠΈ Β«(TOKEN_STREAM)), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    macro_rules! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = Β«litΒ» );
    accept_meta!( my::path ( a b c ) );
    accept_meta!( my::path [ a b c ] );
    accept_meta!( my::path { a b c } );

  • Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Rust 2015 Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ Π²Ρ‹Π²ΠΎΠ΄ ошибки для ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, выявлСнных ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ заимствования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (borrow checker) c использованиСм Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ NLL (Non-Lexical Lifetimes). Π Π°Π½Π΅Π΅ прСдупрСТдСния Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Rust 2018.
    ПослС распространСния измСнСния ΠΈ Π½Π° Ρ€Π΅ΠΆΠΈΠΌ Rust 2015 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Tuhinga o mua ΠΎΡ‚ старого borrow checker.

    Напомним, Ρ‡Ρ‚ΠΎ систСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° основС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΡƒΡ‡Ρ‘Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ заимствованных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ старым ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹Π²ΠΎΠ΄ ошибки для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΌΠΎΠ³ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, вмСсто ошибок ΠΏΠ΅Ρ€Π²ΠΎΠ΅ врСмя Π²Ρ‹Π΄Π°Π²Π°Π»ΠΈΡΡŒ прСдупрСТдСния.

  • ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Β«constΒ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π² любом контСкстС вмСсто констант, ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ is_power_of_two (для Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл).
  • Π’ разряд ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° новая порция API, Π² Ρ‚ΠΎΠΌ числС стабилизированы макрос todo!() ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value,
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32,f64}::from_be_bytes, {f32,f64}::from_le_bytes, and {f32,f64}::from_ne_bytes.

  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ cargo
    whakatinana ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° дискС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ компилятора. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«cargo metadataΒ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция Β«β€”filter-platformΒ» для ΠΏΠΎΠΊΠ°Π·Π° Π² Π³Ρ€Π°Ρ„Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ зависимостСй Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², привязанных ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ http.ssl-version для опрСдСлСния допустимых вСрсий TLS.
    Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ сСкции Β«dev-dependenciesΒ» Π±Π΅Π· указания ΠΊΠ»ΡŽΡ‡Π° Β«versionΒ».

  • Π’ компиляторС rustc обСспСчСн Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 ΠΈ mips64el-unknown-linux-muslabi64. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, Π½ΠΎ Π±Π΅Π· Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСстирования ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сборок.

Source: opennet.ru

Tāpiri i te kōrero