Mwepụta asụsụ mmemme nchara 1.47

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

Автоматическое управление памятью в Rust избавляет разработчика от ошибок при манипулировании указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.

Isi ihe ọhụrụ:

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

fn isi() {
ka xs = [0; 34];
println!("{:?}", xs);
}

  • Enyere mmepụta nke mkpirisi trace (backtrace), mmepụta na ọnọdụ mberede. Ihe ndị na-enweghị mmasị n'ọtụtụ ọnọdụ, ma na-emepụta ihe na-emepụta ma na-adọpụ uche site na isi ihe kpatara nsogbu ahụ, na-ewepụ na nchọta ahụ. Iji weghachi traktị zuru ezu, ị nwere ike iji mgbanwe gburugburu "RUST_BACKTRACE=full". Dịka ọmụmaatụ, maka koodu

fn isi() {
ụjọ!();
}

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

eri 'isi' tụrụ ụjọ na 'ụjọ doro anya', src/main.rs:2:5
nchịkọta azụ azụ:
0: std :: ụjọ ::mmalite_egwu
na /rustc/d…d75a/library/std/src/panicking.rs:497
1: ebe egwuregwu :: isi
na ./src/main.rs:2
2: isi :: ops :: ọrụ :: FnOnce :: kpọọ_otu ugboro
na /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.
  • A na-eji àgwà "const", nke na-ekpebi ohere iji ya mee ihe n'ọnọdụ ọ bụla kama ịnọchite anya, na ụzọ ndị a:
    • ọhụrụ maka ọnụọgụgụ niile na-abụghị efu;
    • checked_add, checked_sub, checked_mul,checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub и saturating_mul для всех целых;
    • is_ascii_alphabetic, bụ_ascii_elu, bụ_ascii_lowercase, bụ_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, bụ_ascii_punctuation, bụ_ascii_graphic, bụ_ascii_whitespace na bụ_ascii_control maka char na u8 ụdị.
  • Для FreeBSD задействован инструментарий из FreeBSD 11.4 (FreeBSD 10 не поддерживает LLVM 11).

E sitere na opennet.ru

isi: linux.org.ru

Tinye a comment