Rust 1.58 Програмчлалын хэлний хувилбар

Опубликован релиз языка программирования общего назначения Rust 1.58, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

Rust-ийн автомат санах ойн удирдлага нь хөгжүүлэгчийг заагчийг удирдах үеийн алдаанаас аварч, санах ойг сулласны дараа санах ойн талбарт хандах, тэг заагчийг халах, буфер хэт ачаалагдах гэх мэт доод түвшний санах ойн ашиглалтын улмаас үүсэх асуудлаас хамгаалдаг. Номын санг түгээх, бүтээн байгуулалтыг хангах, хамаарлыг удирдахын тулд төсөл нь Ачааны багц менежерийг боловсруулдаг. Crates.io репозиторыг номын санг байршуулахад дэмждэг.

Гол инноваци:

  • В блоках форматирования строк, в дополнение к ранее доступной возможности подстановки явно перечисленных после строки переменных по номеру и имени, реализована возможность подстановки произвольных идентификаторов через добавление в строку выражений «{идентификатор}». Например: // Ранее поддерживались конструкции: println!(«Hello, {}!», get_person()); println!(«Hello, {0}!», get_person()); println!(«Hello, {person}!», person = get_person()); // теперь можно указывать let person = get_person(); println!(«Hello, {person}!»);

    Идентификаторы также можно указывать непосредственно в параметрах форматирования. let (width, precision) = get_format(); for (name, score) in get_scores() { println!(«{name}: {score:width$.precision$}»); }

    Новая подстановка работает во всех макросах, поддерживающих определение формата строки, за исключением макроса «panic!» в версиях языка Rust 2015 и 2018, в которых panic!(«{ident}») обрабатывается как обычная строка (в Rust 2021 подстановка срабатывает).

  • Изменено поведение структуры std::process::Command на платформе Windows, которая при выполнении команд из соображений безопасности больше не ищет исполняемые файлы в текущем каталоге. Текущий каталог исключён так как может быть использован для организации выполнения кода злоумышленника в случае запуска программ в не заслуживающих доверия каталогах (CVE-2021-3013). Новая логика определения исполняемых файлов подразумевает поиск в каталогах Rust, в каталоге приложения, системном каталоге Windows и каталогах, указанных в переменной окружения PATH.
  • В стандартной библиотеке расширено число функций, помеченных «#[must_use]» для вывода предупреждения в случае игнорирования возвращаемого значения, что помогает выявить ошибки, вызванные предположением, что функция изменит значения, а не вернёт новое значение.
  • API-ийн шинэ хэсгийг тогтвортой гэсэн ангилалд шилжүүлж, шинж чанаруудын арга, хэрэгжилтийг тогтворжуулсан:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Result::unwrap_unchecked
    • Result::unwrap_err_unchecked
  • Үүнийг тогтмолуудын оронд ямар ч нөхцөлд ашиглах боломжийг тодорхойлдог "const" шинж чанарыг дараах функцүүдэд ашигладаг.
    • Duration::new
    • Duration::checked_add
    • Үргэлжлэх хугацаа:: ханасан_нэмэх
    • Duration::checked_sub
    • Үргэлжлэх хугацаа:: ханасан_дэд
    • Duration::checked_mul
    • Үргэлжлэх хугацаа:: ханасан_муль
    • Duration::checked_div
  • Разрешено разыменование указателей «*const T» в контекстах «const».
  • В пакетном менеджере Cargo в метаданные пакета добавлено поле rust_version, а в команду «cargo install» добавлена опция «—message-format».
  • В компиляторе реализована поддержка механизма защиты CFI (Control Flow Integrity), добавляющего перед каждым косвенным вызовом функции проверки для выявления некоторых форм неопределённого поведения, которые потенциально могут привести к нарушению нормального порядка выполнения (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции.
  • В компиляторе добавлена поддержка 5 и 6 версии формата coverage-сопоставлений LLVM, используемого для оценки охвата кода при тестировании.
  • Хөрвүүлэгчид LLVM-ийн хамгийн бага хувилбарт тавигдах шаардлагыг LLVM 12 болгож нэмэгдүүлсэн.
  • Реализован третий уровень поддержки для платформы x86_64-unknown-none. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

Дополнительно можно отметить публикацию компанией Microsoft выпуска библиотек Rust for Windows 0.30, позволяющих использовать язык Rust для разработки приложений для ОС Windows. В набор входят два crate-пакета (windows и windows-sys), через которые можно обращаться к Win API в программах на языке Rust. Код для поддержки API генерируется динамически из метаданных с описанием API, что позволяет реализовать поддержку не только уже существующих вызовов Win API, но вызовов, которые появятся в будущем. В новой версии добавлена поддержка целевой платформы UWP (Universal Windows Platform), реализованы типажи Handle и Debug.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх