Bản phát hành ngôn ngữ lập trình Rust 1.47

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

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

Những đổi mới chính:

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

fn chính() {
đặt xs = [0; 34];
println!("{:?}", xs);
}

  • Cung cấp đầu ra của các dấu vết ngắn hơn (backtrace), đầu ra trong các tình huống khẩn cấp. Các yếu tố không được quan tâm trong hầu hết các tình huống nhưng làm lộn xộn đầu ra và đánh lạc hướng sự chú ý khỏi nguyên nhân chính của vấn đề sẽ bị loại khỏi dấu vết. Để trả về dấu vết đầy đủ, bạn có thể sử dụng biến môi trường "RUST_BACKTRACE=full". Ví dụ, đối với mã

fn chính() {
hoảng loạn!();
}

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

chủ đề 'chính' hoảng loạn trước 'hoảng loạn rõ ràng', src/main.rs:2:5
dấu vết ngăn xếp ngược:
0: std::panicking::begin_panic
tại /rustc/d…d75a/library/std/src/panicking.rs:497
1: sân chơi::chính
tại ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
tại /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.
  • Thuộc tính “const”, xác định khả năng sử dụng nó trong bất kỳ ngữ cảnh nào thay vì hằng số, được sử dụng trong các phương thức:
    • mới cho tất cả các số nguyên khác 0;
    • 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_lowcase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace và is_ascii_control cho các loại char và u8.
  • Для FreeBSD задействован инструментарий из FreeBSD 11.4 (FreeBSD 10 не поддерживает LLVM 11).

Được lấy từ opennet.ru

Nguồn: linux.org.ru

Thêm một lời nhận xét