Rust 1.47 programavimo kalbos leidimas

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

„Rust“ automatinis atminties valdymas pašalina klaidas manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties manipuliavimo, pvz., prieigos prie atminties srities ją atlaisvinus, nulinių rodyklės nuorodų, buferio viršijimo ir kt. Kuriama paketų tvarkyklė, skirta platinti bibliotekas, užtikrinti surinkimą ir valdyti projekto priklausomybes. krovinys. Для размещения библиотек поддерживается репозиторий dėžės.io.

pagrindinis naujoves:

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

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

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

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

  • Suteikiama trumpesnių pėdsakų išvestis (backtrace), išvestis avarinėse situacijose. Elementai, kurie daugeliu atvejų nedomina, bet užgriozdina išvestį ir atitraukia dėmesį nuo pirminių problemos priežasčių, neįtraukiami į pėdsaką. Norėdami grąžinti visą pėdsaką, galite naudoti aplinkos kintamąjį „RUST_BACKTRACE=full“. Pavyzdžiui, dėl kodo

    fn main() {
    panika!();
    }

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

    gija „pagrindinis“ panikuoja dėl „aiškios panikos“, src/main.rs:2:5
    dėklo atgalinis pėdsakas:
    0: std::panika::begin_panic
    adresu /rustc/d…d75a/library/std/src/panicking.rs:497
    1: žaidimų aikštelė::pag
    adresu ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    adresu /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Компилятор rustc обновлён до сборки с использованием LLVM 11 (Rust naudoja LLVM в качестве бэкенда для генерации кода). При этом сохранена возможность сборки со старыми LLVM, вплоть до версии 8, но по умолчанию (в rust-lang/llvm-project) теперь используется LLVM 11. Релиз LLVM 11 ожидается в ближайшие дни.
  • На платформе Windows в компиляторе rustc обеспечена поддержка включения проверок целостности потока выполнения (Control Flow Guard), активируемых при помощи флага «-C control-flow-guard». На других платформах данный флаг пока игнорируется.
  • Nauja API dalis buvo perkelta į stabilią kategoriją, įskaitant stabilizuotą
    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.

  • Atributas „const“, kuris nustato galimybę jį naudoti bet kuriame kontekste, o ne konstantose, naudojamas metoduose:
    • naujas visiems sveikiesiems skaičiams, išskyrus nulį;
    • checked_add, checked_sub, checked_mul,checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub и saturating_mul для всех целых;
    • yra_ascii_alfabetinis, is_ascii_didžiosios raidės, is_ascii_mažosios raidės, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace ir is_ascii ir_control8 tipai.
  • Для FreeBSD dalyvauja инструментарий из FreeBSD 11.4 (FreeBSD 10 не поддерживает LLVM 11).

Šaltinis: opennet.ru

Добавить комментарий