Rust 1.34 Programming Language Release

Бостоялся Ρ€Π΅Π»ΠΈΠ· языка систСмного программирования Rust 1.34, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Mozilla. Π―Π·Ρ‹ΠΊ сфокусирован Π½Π° бСзопасной Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, обСспСчиваСт автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ прСдоставляСт срСдства для достиТСния высокого ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° выполнСния Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΏΡ€ΠΈ этом ΠΎΠ±Ρ…ΠΎΠ΄ΡΡΡŒ Π±Π΅Π· использования сборщика мусора ΠΈ runtime.

АвтоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Rust избавляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ манипулирования указатСлями ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ области памяти послС Π΅Ρ‘ освобоТдСния, Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ Ρ‚.ΠΏ. Для распространСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, обСспСчСния сборки ΠΈ управлСния зависимостями ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ развиваСтся ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Cargo, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ. Для размСщСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ поддСрТиваСтся Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ crates.io.

Belangrikste innovasies:

  • Hulpmiddels by die Cargo-pakketbestuurder gevoeg om met alternatiewe pakketregisters te werk wat saam met die crates.io publieke register kan bestaan. Private toepassingsontwikkelaars kan byvoorbeeld nou hul eie private register gebruik wat gebruik kan word wanneer afhanklikhede in Cargo.toml gelys word en 'n crates.io-agtige weergawemodel vir hul produkte gebruik, sowel as verwysing na beide crates.io en crates.io in afhanklikhede na jou eie register.

    Для добавлСния внСшнСго рССстра Π² ~/.cargo/config
    Π² сСкции Β«[registries]Β» прСдусмотрСна новая опция Β«my-registryΒ», Π° для упоминания внСшнСго рССстра Π² зависимостях Π² Cargo.toml Π² сСкции Β«[dependencies]Β» появилась опция Β«other-crateΒ». Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ рССстру достаточно ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ» ~/.cargo/credentials ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
    "vrag login --registry=my-register", en om die pakket te publiseer -
    "vrag publiseer --registry=my-register";

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° полноцСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«?Β» Π² тСстах doctests, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² качСствС тСстов. Π Π°Π½Π΅Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€
    "?" kan slegs gebruik word om foute tydens toetsuitvoering te hanteer as daar 'n "fn main()"-funksie of in die "#[toets]"-funksies was;

  • Π’ опрСдСляСмых ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… макросов собствСнных Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… (custom attribute) обСспСчСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² (Β«#[attr($tokens)]Β», Β«#[attr[$tokens]] ΠΈ #[attr{$tokens}]Β»). Π Π°Π½Π΅Π΅ элСмСнты ΠΌΠΎΠ³Π»ΠΈ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΌ/рСкурсивном Π²ΠΈΠ΄Π΅ c использованиСм строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Β«#[foo(bar, baz(quux, foo = Β«barΒ»))]Β», Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС пСрСчислСний (β€˜#[range(0..10)]’) ΠΈ конструкций Π²ΠΈΠ΄Π° Β«#[bound(T: MyTrait)]Β»;
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΈΠΏΠ°ΠΆΠΈ (trait) TryFrom ΠΈ TryInto, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ прСобразования Ρ‚ΠΈΠΏΠΎΠ² с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ошибок. НапримСр, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ from_be_bytes, с цСлочислСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ массивы, Π½ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ часто ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ c Ρ‚ΠΈΠΏΠΎΠΌ Slice, Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ массивами ΠΈ слайсами ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ указанная опСрация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π° Π½Π° Π»Π΅Ρ‚Ρƒ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² .try_into(), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«let num = u32::from_be_bytes(slice.try_into()?)Β». Для ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всСгда Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· Ρ‚ΠΈΠΏΠ° u8 Π² u32) Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ‚ΠΈΠΏ ошибок Infallible, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
    TryFrom vir alle bestaande "Van"-implementerings;

  • ОбъявлСна ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ функция CommandExt::before_exec, позволявшая Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠ΅Ρ€Π΅Π΄ запуском exec, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполнялся Π² контСкстС Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ процСсса, ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ послС Π²Ρ‹Π·ΠΎΠ²Π° fork(). Π’ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… условиях Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ рСсурсы Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ процСсса, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΡ‘Π½Π½Ρ‹Π΅ области памяти, ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ привСсти ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ повСдСнию ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.
    ВмСсто before_exec рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ unsafe-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CommandExt::pre_exec.

  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ цСлочислСнныС Ρ‚ΠΈΠΏΡ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΡ‚ 8 Π΄ΠΎ 64 Π±ΠΈΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, AtomicU8), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ NonZeroI[8|16|32|54|128].
  • 'n Nuwe gedeelte van die API is na die kategorie stabiel geskuif, insluitend die metodes Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add] |sub] en SystemTime is gestabiliseer ::checked_[add|sub]. Die iter::from_fn en iter::opvolgersfunksies is gestabiliseer;
  • Vir alle heelgetaltipes word die checked_pow, saturating_pow, wrapping_pow, en overflowing_pow metodes geΓ―mplementeer;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π½Π° этапС связывания Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ сборочной ΠΎΠΏΡ†ΠΈΠΈ Β«-C linker-plugin-ltoΒ» (rustc ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Rust Π² Π±ΠΈΡ‚ΠΊΠΎΠ΄ LLVM, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ LTO-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ).

Bron: opennet.ru

Voeg 'n opmerking