Rust 1.47 Программалоо тили релиз

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

Rust'тун эстутумдун автоматтык башкаруусу көрсөткүчтөрдү манипуляциялоодо каталарды жок кылат жана эстутумдун төмөнкү деңгээлдеги манипуляциясынан келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутум аймагына ал бошогондон кийин жетүү, нөл көрсөткүчтөр шилтемелери, буферди ашып кетүү ж.б. Китепканаларды бөлүштүрүү, чогултууну камсыздоо жана долбоор тарабынан көз карандылыкты башкаруу үчүн пакет менеджери иштелип чыгууда. жүк. Для размещения библиотек поддерживается репозиторий crates.io.

негизги инновациялар:

  • Реализована поддержка типажей для массивов произвольного размера. Ранее, из-за невозможности определить generic-функции для всех целых значений, стандартная библиотека предоставляла встроенную поддержку типажей только для массивов, размер которых не превышал 32 элемента (типажи для каждого размера были определены статически). Благодаря созданию функциональности константных дженериков («const generics») появилась возможность определения generic-функций для любых размеров массива, но они пока не включены в состав стабильных возможностей языка, хотя реализованы в компиляторе и теперь задействованы в стандартной библиотеке для типажей массивов любого размера.

    Например, следующая конструкция в Rust 1.47 приведёт к выводу содержимого массива, хотя раньше привела бы к ошибке:

    fn main() {
    let xs = [0; 34];

    println!(«{:?}», xs);
    }

  • Кыскача издерди (backtrace), өзгөчө кырдаалдарда чыгарууну камсыз кылуу. Көпчүлүк кырдаалдарда кызыктырбаган, бирок жыйынтыкты бузуп, көңүлдү көйгөйдүн негизги себептеринен алаксыткан элементтер изден чыгарылат. Толук изди кайтаруу үчүн "RUST_BACKTRACE=full" чөйрө өзгөрмөсүн колдонсоңуз болот. Мисалы, код үчүн

    fn main() {
    дүрбөлөң!();
    }

    раньше выводилась трассировка в 23 этапа, а теперь она будет сведена к
    3 этапам, позволяющим сразу уловить суть:

    'main' темасы "ачык паникадан" паникага түштү, src/main.rs:2:5
    стек артка:
    0: std::panicking::begin_panic
    /rustc/d…d75a/library/std/src/panicking.rs:497
    1: оюн аянтчасы:: негизги
    ./src/main.rs:2 дарегинде
    2: core::ops::function::FnOnce::call_once
    /rustc/d…d75a/library/core/src/ops/function.rs:227 дарегинде

  • Компилятор rustc обновлён до сборки с использованием LLVM 11 (Rust колдонуу LLVM в качестве бэкенда для генерации кода). При этом сохранена возможность сборки со старыми LLVM, вплоть до версии 8, но по умолчанию (в rust-lang/llvm-project) теперь используется LLVM 11. Релиз LLVM 11 ожидается в ближайшие дни.
  • На платформе Windows в компиляторе rustc обеспечена поддержка включения проверок целостности потока выполнения (Control Flow Guard), активируемых при помощи флага «-C control-flow-guard». На других платформах данный флаг пока игнорируется.
  • API'лердин жаңы бөлүгү туруктуу категорияга, анын ичинде турукташтырылган категорияга которулду
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive::is_empty,
    Result::as_deref,
    Result::as_deref_mut,
    Vec::leak,
    pointer::offset_from,
    f32::TAU и
    f64::TAU.

  • Методдордо аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган “const” атрибуту колдонулат:
    • нөлдөн башка бардык бүтүн сандар үчүн жаңы;
    • checked_add, checked_sub, checked_mul,checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub и saturating_mul для всех целых;
    • is_ascii_alphabetic, is_ascii_upppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitescirrol жана ucont.
  • Для FreeBSD тартылган инструментарий из FreeBSD 11.4 (FreeBSD 10 не поддерживает LLVM 11).

Source: opennet.ru

Комментарий кошуу