Umhlwa 1.53 ukhululwe. UGoogle uza kuxhasa ngemali ukongeza inkxaso yeRust kwiLinux kernel

Ukukhutshwa kwenkqubo yolwimi lwenkqubo iRust 1.53, eyasekwa yiprojekthi yeMozilla, kodwa ngoku iphuhliswe phantsi kwentlangano ezimeleyo engenzi nzuzo iRust Foundation, ishicilelwe. Ulwimi lugxininise ekukhuselweni kwememori, lubonelela ngolawulo lwememori oluzenzekelayo, kwaye lubonelela ngeendlela zokufikelela kwi-parallelism ephezulu yomsebenzi ngaphandle kokusebenzisa umqokeleli wenkunkuma okanye ixesha lokuqhuba (ixesha lokuqhuba lincitshiswe ekuqaliseni okusisiseko kunye nokugcinwa kwelayibrari esemgangathweni).

Ulawulo lwenkumbulo oluzenzekelayo lwe-Rust lugcina umphuhlisi kwiimpazamo xa ulawula izikhombisi kwaye ukhusela kwiingxaki ezivela ngenxa yokukhohlisa kwimemori ekwinqanaba elisezantsi, njengokufikelela kwindawo yememori emva kokuba ikhululiwe, ukurhoxisa izikhombisi ezingenanto, ukugqithiswa kwe-buffer, njl. Ukusasaza amathala eencwadi, ukubonelela ngokwakha kunye nokulawula ukuxhomekeka, iprojekthi iphuhlisa umphathi wephakheji yeCargo. Indawo yokugcina i-crates.io iyaxhaswa kukusingatha amathala eencwadi.

Iinguqulelo eziphambili:

  • Для массивов Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚ΠΈΠΏΠ°ΠΆ IntoIterator, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов массива ΠΏΠΎ значСниям: for i in [1, 2, 3] { .. }

    Π’Π°ΠΊΠΆΠ΅ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ массивов Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Π Π°Π½Π΅Π΅ IntoIterator Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ссылок Π½Π° массивы, Ρ‚.Π΅. для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΏΠΎ значСниям Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ использованиС ссылок (Β«&[1, 2, 3]Β») ΠΈΠ»ΠΈ Β«[1, 2, 3].iter()Β». Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ IntoIterator для массивов мСшали ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Π² компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° array.into_iter() Π² (&array).into_iter(). Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Ρ‘ΠΌ β€” компилятор ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ array.into_iter() Π² (&array).into_iter(), ΠΊΠ°ΠΊ Ссли Π±Ρ‹ отсутствовала рСализация Ρ‚ΠΈΠΏΠ°ΠΆΠ° IntoIterator, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с использованиСм синтаксиса Β«.into_iter()Β» ΠΈ Π½Π΅ касаясь Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ΅ Β«in [1, 2, 3]Β», Β«iter.zip([1, 2, 3])Β», Β«IntoIterator::into_iter([1, 2, 3])Β».

  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ указания Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Β«|Β» (логичСская опСрация OR) Π² любой части шаблона, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вмСсто Β«Some(1) | Some(2)Β» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Β«Some(1 | 2)Β»: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ использованиС Π½Π΅-ASCII символов Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ…, Π² Ρ‚ΠΎΠΌ числС Π»ΡŽΠ±Ρ‹Ρ… Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… символов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Π² спСцификации Unicode UAX 31, Π½ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ символов emoji. ΠŸΡ€ΠΈ использовании Ρ€Π°Π·Π½Ρ‹Ρ…, Π½ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… ΠΏΠΎ Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΡŽ символов, компилятор Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. const BLΓ…HAJ: &str = «🦈»; struct δΊΊ { 名字: String, } let Ξ± = 1; let sos = 2; warning: identifier pair considered confusable between β€˜ο½“β€™ and β€˜s’
  • Inxalenye entsha ye-APIs idluliselwe kudidi oluzinzileyo, kubandakanywa oku kulandelayo kuzinzisiwe:
    • array::from_ref
    • array::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Duration::ZERO
    • Duration::MAX
    • Duration::is_zero
    • Ubude bexesha::iyahlutha_yongeza
    • Ubude bexesha::incinci_iyahlutha
    • Ubude bexesha::iyahlutha_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • IntoIterator для массивов
    • {integer}::BITS
    • io::Error::Unsupported
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • Option::insert
    • Ordering::is_eq
    • Ordering::is_ne
    • Ordering::is_lt
    • Ordering::is_gt
    • Ordering::is_le
    • Ordering::is_ge
    • OsStr::make_ascii_lowercase
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_lowercase
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef<[T]> для slice::IterMut
    • impl SliceIndex для (Bound<usize>, Bound<usize>)
    • Vec::extend_from_within
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ wasm64-unknown-unknown. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, Π½ΠΎ Π±Π΅Π· Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСстирования, ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сборок ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ возмоТности сборки ΠΊΠΎΠ΄Π°.
  • ΠŸΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Cargo ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½ Π½Π° использованиС ΠΈΠΌΠ΅Π½ΠΈ Β«mainΒ» для основной Π²Π΅Ρ‚ΠΊΠΈ Git-рСпозитория (HEAD). Для зависимостСй, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Π² рСпозиториях, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… имя main вмСсто master, большС Π½Π΅ трСбуСтся ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² настройках branch = Β«mainΒ».
  • Kumqokeleli, iimfuno zoguqulelo oluncinci lwe-LLVM luphakanyiselwe kwi-LLVM 10.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ прСдоставлСниС финансирования Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² ядро Linux срСдств для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° языкС Rust. Π Π°Π±ΠΎΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅ΡΡ‚ΠΈΡΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Prossimo ΠΏΠΎΠ΄ эгидой ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ISRG (Internet Security Research Group), которая являСтся ΡƒΡ‡Ρ€Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Let’s Encrypt ΠΈ способствуСт ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΡŽ HTTPS ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ защищённости ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°. БрСдства Π±ΡƒΠ΄ΡƒΡ‚ прСдоставлСны ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google, которая ΠΎΠΏΠ»Π°Ρ‚ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ МигСля ΠžΡ…Π΅Π΄Π° (Miguel Ojeda), Π°Π²Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Rust-for-Linux. Π Π°Π½Π΅Π΅ ISRG ΠΈ Google ΡƒΠΆΠ΅ профинансировали созданиС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ HTTP-бэкСнда для ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ curl ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ TLS-модуля для http-сСрвСра Apache.

По Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Microsoft ΠΈ Google ΠΎΠΊΠΎΠ»ΠΎ 70% уязвимостСй Π²Ρ‹Π·Π²Π°Π½Ρ‹ нСбСзопасной Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ использованиС языка Rust для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ядра, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ устройств, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ риск появлСния уязвимостСй, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… нСбСзопасной Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ появлСниС Ρ‚Π°ΠΊΠΈΡ… ошибок, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ области памяти послС Π΅Ρ‘ освобоТдСния ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±ΡƒΡ„Π΅Ρ€Π°.

Ukuphathwa okukhuselekileyo kwimemori kubonelelwa kwiRust ngexesha lokuqokelela ngokujonga ireferensi, ukugcina umkhondo wobunini bento kunye nobomi bento (ububanzi), kunye nokuvavanya ukuchaneka kofikelelo lwememori ngexesha lokwenziwa kwekhowudi. Umhlwa ukwabonelela ngokhuseleko ngokuchasene nokuphuphuma kwenani elipheleleyo, kufuna ukuqaliswa okunyanzelekileyo kwamaxabiso aguquguqukayo ngaphambi kokusetyenziswa, iphatha iimpazamo ngcono kwithala leencwadi elisemgangathweni, isebenzisa ingqikelelo yeembekiselo ezingenakuguquguquka kunye nezinto eziguquguqukayo ngokungagqibekanga, ibonelela ngochwethezo olomeleleyo ukuze kuncitshiswe iimpazamo ezinengqiqo.

umthombo: opennet.ru

Yongeza izimvo