ipata 1.60 Siseto ede Tu

Itusilẹ ti ede siseto gbogboogbo-idi Rust 1.60, ti o da nipasẹ iṣẹ akanṣe Mozilla, ṣugbọn ni bayi ni idagbasoke labẹ awọn atilẹyin ti ominira ti kii ṣe èrè agbari Rust Foundation, ti ṣe atẹjade. Ede naa dojukọ aabo iranti ati pese awọn ọna lati ṣaṣeyọri isọdọkan iṣẹ giga lakoko ti o yago fun lilo ikojọpọ idoti ati akoko asiko (akoko asiko ti dinku si ipilẹṣẹ ipilẹ ati itọju ile-ikawe boṣewa).

Awọn ọna mimu iranti Rust ṣe igbala awọn olupilẹṣẹ lati awọn aṣiṣe nigbati o ba ni ifọwọyi awọn itọka ati daabobo lodi si awọn iṣoro ti o dide nitori mimu iranti ipele kekere, gẹgẹbi iraye si agbegbe iranti lẹhin ti o ti ni ominira, piparẹ awọn itọka asan, awọn ifasilẹ ifipamọ, ati bẹbẹ lọ. Lati kaakiri awọn ile-ikawe, pese awọn kikọ ati ṣakoso awọn igbẹkẹle, iṣẹ akanṣe n ṣe idagbasoke oluṣakoso package Ẹru. Ibi ipamọ crates.io jẹ atilẹyin fun awọn ile-ikawe alejo gbigba.

Ailewu iranti ti pese ni ipata ni akoko iṣakojọ nipasẹ ṣiṣe ayẹwo itọkasi, ṣiṣe itọju ohun-ini ohun, titọju awọn igbesi aye ohun (awọn iwọn), ati iṣiro deede wiwọle iranti lakoko ṣiṣe koodu. Ipata tun pese aabo lodi si ṣiṣan odidi odidi, nilo ipilẹṣẹ dandan ti awọn iye oniyipada ṣaaju lilo, mu awọn aṣiṣe dara julọ ni ile-ikawe boṣewa, lo imọran ti awọn itọkasi ailagbara ati awọn oniyipada nipasẹ aiyipada, nfunni titẹ aimi to lagbara lati dinku awọn aṣiṣe ọgbọn.

Awọn imotuntun akọkọ:

  • В компиляторе rustc стабилизирована основанная на LLVM система для генерации coverage-данных, используемых для оценки охвата кода при тестировании. Для включения coverage-данных при сборке необходимо использовать флаг «-Cinstrument-coverage», например, запуская сборку командой «RUSTFLAGS=»-C instrument-coverage» cargo build». После запуска собранного таким образом исполняемого файла в текущем каталоге будет сохранён файл default.profraw, для обработки которого можно использовать утилиту llvm-profdata из компонента llvm-tools-preview. Обработанный утилитой llvm-profdata вывод затем можно передать программе llvm-cov для генерации аннотированного отчёта со сведениями об охвате кода. Информация о привязке к исходным текстам берётся из исследуемого исполняемого файла, в который включаются необходимые данные о связи coverage-счётчиков с кодом. 1| 1|fn main() { 2| 1| println!(«Hello, world!»); 3| 1|}
  • В пакетном менеджере cargo стабилизирована поддержка флага «—timings», включающего формирование детального отчёта о ходе сборки и времени выполнения каждого шага. Отчёт может оказаться полезен для оптимизации производительности сборочного процесса.
  • В пакетном менеджере cargo предложен новый синтаксис для механизма условной компиляции и выбора необязательных зависимостей, настраиваемого в файле Cargo.toml через перечисление списка именованных свойств в секции [features] и активируемого через включение свойств во время сборки пакета при помощи флага «—features». В новой версии добавлена поддержка зависимостей в отдельных пространствах имён и слабых (weak) зависимостей.

    В первом случае реализована возможность использования внутри секции «[features]» элементов с префиксом «dep:» для явной привязки к необязательной зависимости без неявного представления этой зависимости как свойства (feature). Во втором случае добавлена поддержка пометки знаком «?» («package-name?/feature-name») необязательных зависимостей, которые следует включить только, если какое-то другое свойство включает данную необязательную зависимость. Например, в примере ниже включение свойства serde приведёт к включению зависимости «serde», а также свойства «serde» для зависимости «rgb», но только если где-то ещё включена зависимость «rgb»: [dependencies] serde = { version = «1.0.133», optional = true } rgb = { version = «0.8.25», optional = true } [features] serde = [«dep:serde», «rgb?/serde»]

  • Возвращена отключённая в прошлом выпуске поддержка инкрементальной компиляции. Ошибка в компиляторе, из-за которой функция была отключена, устранена.
  • Решены некоторые проблемы с предоставлением для таймеров Instant гарантии монотонного расчёта времени, при котором учитывается время проведённое системой в спящем режиме. Ранее для работы таймера по возможности использовался OS API, который не учитывал проблемные ситуации, нарушающие монотонность времени, такие как проблемы с оборудованием, применение виртуализации или ошибки в операционной системе.
  • Apa tuntun ti API ni a ti gbe si ẹka ti iduroṣinṣin, pẹlu awọn ọna ati awọn imuse ti awọn abuda ti jẹ imuduro:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • Boya Uninit :: ro_nit_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • Display для io::ErrorKind
    • From для ExitCode
    • Not для ! (тип «never»)
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Реализован третий уровень поддержки для платформ mips64-openwrt-linux-musl* и armv7-unknown-linux-uclibceabi (softfloat). Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
  • Компилятор переведён на использование LLVM 14.

Дополнительно можно отметить:

  • Добавлена поддержка раскрутки компилятора (bootstrapping) rustc при помощи бэкенда rustc_codegen_gcc, позволяющего использовать библиотеку libgccjit от проекта GCC в качестве генератора кода в rustc, что позволяет обеспечить в rustc поддержку доступных в GCC архитектур и оптимизаций. Под раскруткой компилятора понимается возможность использования в rustc генератора кода на основе GCC для сборки самого компилятора rustc. С практической стороны подобная возможность позволяет собирать rust-программы для архитектур, ранее не поддерживаемых в rustc.
  • Доступен выпуск инструментария uutils coreutils 0.0.13, в рамках которого развивается аналог пакета GNU Coreutils, переписанный на языке Rust. В состав coreutils входит более ста утилит, включая sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln и ls. Целью проекта является создание кросс-платформенной альтернативной реализации Coreutils, способной работать в том числе на платформах Windows, Redox и Fuchsia, а также распространение под пермиссивной лицензией MIT, вместо копилефт-лицензии GPL.

    В новой версии улучшены реализации многих утилит, в том числе значительно улучшена совместимость утилит cp, dd, df, split и tr с аналогами от проекта GNU. Предоставлена online-документация. Для разбора аргументов командной строки задействован парсер clap, что позволило улучшить вывод для флага «—help» и добавить поддержку аббревиатур длинных команд (например, можно указывать «ls —col» вместо «ls —color»).

orisun: opennet.ru

Fi ọrọìwòye kun