Veröffentlichung der Programmiersprache Rust 1.80

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

Die Speicherverwaltungsmethoden in Rust befreien Entwickler von Fehlern beim Umgang mit Zeigern und schützen vor Problemen, die durch die Programmierung auf niedriger Ebene entstehen, wie z.B. den Zugriff auf freigegebenen Speicher, Dereferenzierung von Nullzeigern, Pufferüberläufe usw. Zur Verteilung von Bibliotheken, zur Gewährleistung des Builds und zum Management von Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.

Die sichere Handhabung von Speicher in Rust wird während der Kompilierung durch die Überprüfung von Referenzen, das Verfolgen des Besitztums von Objekten, das Management der Lebensdauer von Objekten (Sichtbarkeitsbereiche) und die Bewertung der Korrektheit des Zugriffs auf den Speicher zur Laufzeit sichergestellt. Rust bietet außerdem Mechanismen zum Schutz vor ganzzahligen Überläufen, erfordert die verpflichtende Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek effektiver, implementiert das Konzept der Unveränderlichkeit (immutable) von Referenzen und Variablen standardmäßig und bietet eine starke statische Typisierung zur Minimierung logischer Fehler.

Hauptneuheiten:

  • Добавлены структуры LazyCell и LazyLock, позволяющие отложить инициализацию данных до первого доступа (вызов функции инициализации осуществляется при попытке доступа к значению). LazyLock отличается от LazyCell поддержкой средств синхронизации для использования в многопоточном коде. use std::sync::LazyLock; use std::time::Instant; static LAZY_TIME: LazyLock<Instant> = LazyLock::new(Instant::now); fn main() { let start = Instant::now(); std::thread::scope(|s| { s.spawn(|| { println!(«Thread lazy time is {:?}», LAZY_TIME.duration_since(start)); }); println!(«Main lazy time is {:?}», LAZY_TIME.duration_since(start)); }); }
  • В компиляторе rustc стабилизирована опция «—check-cfg», которая задействована в пакетном менеджере для проверки всех имён и значений, задаваемых через cfg, включая имена из Cargo.toml. fn main() { println!(«Hello, world!»); #[cfg(feature = «crayon»)] rayon::join( || println!(«Hello, Thing One!»), || println!(«Hello, Thing Two!»), ); } warning: unexpected `cfg` condition value: `crayon` —> src/main.rs:4:11 | 4 | #[cfg(feature = «crayon»)] | ^^^^^^^^^^——— | | | help: there is a expected value with a similar name: `»rayon»`
  • В шаблонах разрешено указание диапазонов в форматах «a..b» и «..b», которые аналогичны использованию выражений Range и RangeTo. pub fn size_prefix(n: u32) -> &’static str { const K: u32 = 10u32.pow(3); const M: u32 = 10u32.pow(6); const G: u32 = 10u32.pow(9); match n { ..K => «», K..M => «k», M..G => «M», G.. => «G», } }
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
    • impl Default for Rc<CStr>
    • impl Default for Rc<str>
    • impl Default for Rc<[T]>
    • impl Default for Arc<str>
    • impl Default for Arc<CStr>
    • impl Default for Arc<[T]>
    • impl IntoIterator for Box<[T]>
    • impl FromIterator for Box<str>
    • impl FromIterator<char> for Box<str>
    • LazyCell
    • LazyLock
    • Duration::div_duration_f32
    • Duration::div_duration_f64
    • Option::take_if
    • Seek::seek_relative
    • BinaryHeap::as_slice
    • NonNull::offset
    • NonNull::byte_offset
    • NonNull::add
    • NonNull::byte_add
    • NonNull::sub
    • NonNull::byte_sub
    • NonNull::offset_from
    • NonNull::byte_offset_from
    • NonNull::read
    • NonNull::read_volatile
    • NonNull::read_unaligned
    • NonNull::write
    • NonNull::write_volatile
    • NonNull::write_unaligned
    • NonNull::write_bytes
    • NonNull::copy_to
    • NonNull::copy_to_nonoverlapping
    • NonNull::copy_from
    • NonNull::copy_from_nonoverlapping
    • NonNull::replace
    • NonNull::swap
    • NonNull::drop_in_place
    • NonNull::align_offset
    • <[T]>::split_at_checked
    • <[T]>::split_at_mut_checked
    • str::split_at_checked
    • str::split_at_mut_checked
    • str::trim_ascii
    • str::trim_ascii_start
    • str::trim_ascii_end
    • <[u8]>::trim_ascii
    • <[u8]>::trim_ascii_start
    • <[u8]>::trim_ascii_end
    • Ipv4Addr::BITS
    • Ipv4Addr::to_bits
    • Ipv4Addr::from_bits
    • Ipv6Addr::BITS
    • Ipv6Addr::to_bits
    • Ipv6Addr::from_bits
    • Vec::<[T; N]>::into_flattened
    • <[[ T; N]]>::as_flattened
    • <[[ T; N]]>::as_flattened_mut
  • Das „const“-Merkmal, das die Verwendung in jedem Kontext anstelle von Konstanten ermöglicht, wurde in den Funktionen angewendet:
    • <[T]>::last_chunk
    • BinaryHeap::new
  • Реализован третий уровень поддержки для платформы x86_64-unknown-linux-none. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster