Lingua di prugrammazione Rust versione 1.57

A liberazione di a lingua di prugrammazione di u sistema Rust 1.57, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspici di l'urganizazione indipendente Rust Foundation, hè stata publicata. A lingua fucalizza nantu à a sicurità di a memoria, furnisce una gestione automatica di a memoria, è furnisce i mezi per ottene un parallelismu elevatu di u travagliu senza aduprà un cullizzioni di basura o runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di a biblioteca standard).

A gestione automatica di a memoria di Rust salva u sviluppatore da l'errore durante a manipulazione di puntatori è prutegge da i prublemi chì si sviluppanu per via di a manipulazione di memoria di livellu bassu, cum'è l'accessu à una zona di memoria dopu chì hè stata liberata, dereferencing null pointers, buffer overruns, etc. Per distribuisce biblioteche, furnisce e custruzzioni è gestisce e dipendenze, u prugettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per e biblioteche di hosting.

Innuvazioni principali:

  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ использованиС макроса Β«panic!Β» Π² контСкстах, создаваСмых ΠΏΡ€ΠΈ компиляции, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ объявлСния Β«const fnΒ». ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠΌΠΈΠΌΠΎ использования Β«panic!Β» Π² const-ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ использованиС макроса Β«assert!Β» ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… API стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Бтабилизация ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всю инфраструктуру форматирования, поэтому Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ макрос Β«panic!Β» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со статичСскими строками (panic!(«…»)) ΠΈΠ»ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Β«&strΒ» ΠΏΡ€ΠΈ подстановкС (panic!(Β«{}Β», a)), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ подстановкой Β«{}Β» Π±Π΅Π· спСцификаторов форматирования ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ. Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡ‚ΡŒ макросов Π² константных контСкстах Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π°, Π½ΠΎ стабилизированных возмоТностСй ΡƒΠΆΠ΅ достаточно для выполнСния assert-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π½Π° этапС компиляции: const _: () = assert!(std::mem::size_of::<u64>() == 8); const _: () = assert!(std::mem::size_of::<u8>() == 1);
  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ Cargo Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ использованиС ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Β«devΒ», Β«releaseΒ», Β«testΒ» ΠΈ Β«benchΒ». НапримСр, для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° этапС связывания (LTO) Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ формирования Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… сборок ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π² Cargo.toml ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ Β«productionΒ» ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ Ρ„Π»Π°Π³ Β«lto = trueΒ». ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ собствСнных ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ трСбуСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ для наслСдования ΠΈΠ· Π½Π΅Π³ΠΎ настроСк ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ создаётся ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ Β«productionΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дополняСт ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ Β«releaseΒ» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³Π° Β«lto = trueΒ». Π‘Π°ΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ активируСтся ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ cargo с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ Β«β€”profile productionΒ», Π° сборочныС Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Β«target/productionΒ». [profile.production] inherits = Β«releaseΒ» lto = true
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ использованиС try_reserve для Ρ‚ΠΈΠΏΠΎΠ² Vec, String, HashMap, HashSet ΠΈ VecDeque, Ρ‡Ρ‚ΠΎ позволяСт Π·Π°Ρ€Π°Π½Π΅Π΅ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мСсто для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ числа элСмСнтов Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ частоту выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ выдСлСния памяти ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ·-Π·Π° Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти.
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ макросов с Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками Π² выраТСниях ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Β«m!{ .. }.method()Β» ΠΈ Β«m!{ .. }?Β».
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ File::read_to_end ΠΈ read_to_string.
  • U supportu per a specificazione Unicode hΓ¨ stata aghjurnata Γ  a versione 14.0.
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΎ число Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ… Β«#[must_use]Β» для Π²Ρ‹Π²ΠΎΠ΄Π° прСдупрСТдСния Π² случаС игнорирования Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ошибки, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ функция ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ значСния, Π° Π½Π΅ Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ бэкСнд для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° с использованиСм libgccjit.
  • Una nova parte di l'API hΓ¨ stata trasferita Γ  a categuria di stabile, cumprese i metudi Γ¨ l'implementazione di i tratti sΓ² stati stabilizzati:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Β«constΒ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π² любом контСкстС вмСсто констант, ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ hint::unreachable_unchecked.
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi ΠΈ armv7a-kmc-solid_asp3-eabihf. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, Π½ΠΎ Π±Π΅Π· Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСстирования, ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сборок ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ возмоТности сборки ΠΊΠΎΠ΄Π°.

Source: opennet.ru

Add a comment