Rust 1.53 lage. Google pral finanse ajoute sipò Rust nan nwayo Linux la

Yo te pibliye liberasyon langaj pwogramasyon sistèm Rust 1.53, ki te fonde pa pwojè Mozilla, men kounye a devlope anba ejid òganizasyon endepandan ki pa gen pwofi Rust Foundation. Lang la konsantre sou sekirite memwa, bay jesyon memwa otomatik, epi li bay mwayen pou reyalize paralèl travay segondè san yo pa itilize yon pèseptè fatra oswa ègzekutabl (se exécution redwi a inisyalizasyon debaz ak antretyen nan bibliyotèk la estanda).

Jesyon otomatik memwa Rust a elimine erè lè w ap manipile endikasyon ak pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba, tankou aksè nan yon rejyon memwa apre li fin libere, dereferans pointeur nil, depase tanpon, elatriye. Pou distribye bibliyotèk, asire asanble ak jere depandans, pwojè a ap devlope manadjè pake kago. Repozitwa crates.io sipòte pou hosting bibliyotèk.

Prensipal inovasyon:

  • Для массивов реализован типаж 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 ‘s’ and ‘s’
  • Yon nouvo pòsyon API yo te transfere nan kategori ki estab, ki gen ladan estabilize sa yo:
    • 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
    • Duration::saturating_add
    • Duration::saturating_sub
    • Duration::saturating_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».
  • Nan konpilatè a, kondisyon pou vèsyon minimòm LLVM yo ogmante nan 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 для разработки компонентов ядра, таких как драйверы устройств, позволит снизить риск появления уязвимостей, вызванных небезопасной работой с памятью, и исключить появление таких ошибок, как обращением к области памяти после её освобождения и выход за границы буфера.

Sekirite memwa yo bay nan Rust nan moman konpile atravè tcheke referans, kenbe tras nan pwopriyetè objè a ak tout lavi objè a (dimansyon), osi byen ke nan evalyasyon kòrèk aksè nan memwa pandan ekzekisyon kòd. Rust tou bay pwoteksyon kont debòde nonb antye relatif, mande pou inisyalizasyon obligatwa nan valè varyab anvan ou itilize, okipe erè pi byen nan bibliyotèk estanda a, aplike konsèp nan referans imuiabl ak varyab pa default, ofri fò sezisman estatik pou minimize erè lojik.

Sous: opennet.ru

Add nouvo kòmantè