Rust 1.47 Programméiersprooch Fräisetzung

publizéiert Verëffentlechung 1.47 vun der Systemprogramméierungssprooch Rust, основанного проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и Course (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

Dem Rust seng automatesch Erënnerungsmanagement eliminéiert Feeler beim Manipulatioun vun Pointer a schützt géint Probleemer déi aus Low-Level Memory Manipulatioun entstinn, sou wéi Zougang zu enger Erënnerungsregioun nodeems se befreit gouf, Null Pointer Dereferences, Puffer Iwwerstonnen, etc. E Package Manager gëtt entwéckelt fir Bibliothéiken ze verdeelen, Assemblée ze garantéieren an Ofhängegkeete vum Projet ze managen. cargo. Для размещения библиотек поддерживается репозиторий crates.io.

Haaptstrooss Innovatiounen:

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

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

    fn main() {
    lass xs = [0; 34; an;

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

  • Versuergt Ausgang vu méi kuerze Spuren (Backtrace), Ausgang an Noutsituatiounen. Elementer, déi an de meeschte Situatiounen net interesséiert sinn, awer d'Ausgab zerstéieren an d'Opmierksamkeet vun de primäre Ursaachen vum Problem oflenken, sinn aus der Spuer ausgeschloss. Fir eng voll Spuer zréckzekommen, kënnt Dir d'Ëmfeldvariabel "RUST_BACKTRACE=voll" benotzen. Zum Beispill, fir de Code

    fn main() {
    Panik!();
    }

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

    thread 'main' panikéiert bei 'explizit Panik', src/main.rs:2:5
    Stack backtrace:
    0: std::panicking::begin_panic
    bei /rustc/d…d75a/library/std/src/panicking.rs:497
    1: Spillplaz :: Haaptsäit
    op ./src/main.rs:2
    2: Kär::ops::Funktioun::FnOnce::Call_once
    bei /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Компилятор rustc обновлён до сборки с использованием LLVM 11 (Rust benotzt LLVM в качестве бэкенда для генерации кода). При этом сохранена возможность сборки со старыми LLVM, вплоть до версии 8, но по умолчанию (в rust-lang/llvm-project) теперь используется LLVM 11. Релиз LLVM 11 ожидается в ближайшие дни.
  • На платформе Windows в компиляторе rustc обеспечена поддержка включения проверок целостности потока выполнения (Control Flow Guard), активируемых при помощи флага «-C control-flow-guard». На других платформах данный флаг пока игнорируется.
  • En neien Deel vun APIen gouf an déi stabil Kategorie transferéiert, dorënner stabiliséiert
    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.

  • Den Attribut "const", wat d'Méiglechkeet bestëmmt et an all Kontext ze benotzen anstatt Konstanten, gëtt an de Methoden benotzt:
    • nei fir all ganz Zuelen ausser null;
    • checked_add, checked_sub, checked_mul,checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub и saturating_mul для всех целых;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace and is_ascii_types for char
  • Fir FreeBSD involvéiert инструментарий из FreeBSD 11.4 (FreeBSD 10 не поддерживает LLVM 11).

Source: opennet.ru

Setzt e Commentaire