Rilis Rust 1.95. Menambahkan Rust ke server tampilan Mir. Penganalisis lalu lintas AyaFlow dalam Rust.

Bahasa pemrograman Rust 1.95, yang didirikan oleh proyek Mozilla tetapi kini dikembangkan di bawah naungan Rust Foundation, sebuah lembaga nirlaba independen, telah dirilis. Bahasa ini berfokus pada keamanan memori dan menyediakan perangkat untuk mencapai paralelisme eksekusi tugas yang tinggi, tanpa menggunakan garbage collector dan runtime (runtime disederhanakan menjadi inisialisasi dasar dan pemeliharaan pustaka standar).

Metode manajemen memori Rust dirancang untuk menghilangkan kesalahan dalam manipulasi pointer dan melindungi dari masalah yang muncul dari manajemen memori tingkat rendah, seperti mengakses memori setelah dibebaskan, melakukan dereferensi pointer null, buffer overrun, dan sebagainya. Proyek ini sedang mengembangkan manajer paket Cargo untuk mendistribusikan pustaka, memfasilitasi proses build, dan mengelola dependensi. Repositori crates.io dikelola untuk menampung pustaka.

Keamanan memori disediakan di Rust pada waktu kompilasi melalui pemeriksaan referensi, melacak kepemilikan objek, melacak masa pakai objek (cakupan), dan menilai kebenaran akses memori selama eksekusi kode. Rust juga memberikan perlindungan terhadap integer overflow, membutuhkan inisialisasi wajib dari nilai variabel sebelum digunakan, menangani kesalahan dengan lebih baik di perpustakaan standar, menerapkan konsep referensi dan variabel yang tidak dapat diubah secara default, menawarkan pengetikan statis yang kuat untuk meminimalkan kesalahan logis.

Inovasi utama:

  • Menambahkan makro "cfg_select!", yang dapat digunakan sebagai pengganti paket "cfg-if" untuk menangani beberapa kondisi kompilasi dengan gaya blok "match", tanpa mendefinisikan rangkaian kondisi dengan konstruksi "#[cfg]". cfg_select! { unix => { fn foo() { /* unix */ } } target_pointer_width = "32" => { fn foo() { /* non-unix, 32-bit */ } } _ => { fn foo() { /* bukan unix dan bukan 32-bit */ } } }
  • Kemampuan untuk menentukan ekspresi "if let" di dalam blok "match" untuk membuat pencocokan pola bersyarat telah distabilkan. Sebelumnya, dukungan untuk menentukan beberapa ekspresi "let" menggunakan operator "&&" telah distabilkan untuk blok "if" dan "while". match value { Some(x) if let Ok(y) = compute(x) => { println!("{}, {}", x, y); } _ => {} }
  • Dukungan assembler inline yang stabil untuk arsitektur PowerPC dan PowerPC64.
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • MaybeUninit<[T; N]>: Dari<[MaybeUninit ; N]>
    • MaybeUninit<[T; N]>: AsRef<[MaybeUninit ; N]>
    • MaybeUninit<[T; N]>: AsRef<[MaybeUninit ]>
    • MaybeUninit<[T; N]>: AsMut<[MaybeUninit ; N]>
    • MaybeUninit<[T; N]>: AsMut<[MaybeUninit ]>
    • [MungkinUninit] ; N]: Dari
    • Sel<[T; N]>: AsRef<[Sel ; N]>
    • Sel<[T; N]>: AsRef<[Sel ]>
    • Sel<[T]>: AsRef<[Sel ]>
    • bool: TryFrom<{integer}>
    • AtomicPtr::update
    • AtomicPtr::coba_perbarui
    • AtomicBool::update
    • AtomicBool::coba_perbarui
    • AtomicIn::update
    • AtomicIn::try_update
    • AtomicUn::update
    • AtomicUn::try_update
    • cfg_select!
    • mod core::range
    • inti::rentang::RentangInklusif
    • inti::rentang::RentangInklusifIter
    • inti::petunjuk::jalur_dingin
    • <*const T>::as_ref_unchecked
    • <*mut T>::as_ref_unchecked
    • <*mut T>::as_mut_unchecked
    • Vec::push_mut
    • Vec::insert_mut
    • VecDeque::push_front_mut
    • VecDeque::push_back_mut
    • VecDeque::insert_mut
    • LinkedList::push_front_mut
    • LinkedList::push_back_mut
    • Tata letak::penekanan_menggantung
    • Tata letak::ulang
    • Tata letak::ulang_terpaket
    • Tata letak::perluas_terpaket
  • Tanda “const” digunakan dalam fungsi:
    • fmt::from_fn
    • ControlFlow::is_break
    • ControlFlow::is_continue
  • Pada versi stabil dari toolchain, dukungan untuk meneruskan spesifikasi platform target asli ke kompiler telah dihapus.
  • Platform target powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos, dan aarch64-apple-visionos-sim telah dipindahkan ke level dukungan 2, yang mencakup jaminan pembuatan tetapi tidak ada jaminan lulus rangkaian pengujian.

Selain itu, kami ingin menyoroti proyek dan acara yang baru saja diumumkan terkait Rust:

  • Canonical telah memperkenalkan server tampilan Mir 2.26, yang menyediakan serangkaian pustaka untuk membuat gambar komposit. server Berdasarkan protokol Wayland dan menggabungkan fungsionalitas khas pengelola jendela dan server tampilan, Mir digunakan dalam proyek-proyek seperti pengelola komposit Miracle, shell kios web Ubuntu Frame, dan lingkungan pengguna Miriway.

    Rilis terbaru ini menonjol karena menambahkan kemampuan untuk mengembangkan komponen dalam Rust. Subsistem manajemen input alternatif, evdev-rs, telah diimplementasikan dalam Rust, dan pekerjaan telah dimulai pada frontend berbasis Rust, wayland-rs, untuk Wayland. Perubahan non-Rust di Mir mencakup dukungan untuk protokol Wayland ext_image_copy_capture_v1 dan input-triggers.

  • Versi pertama dari penganalisis lalu lintas ayaFlow telah diterbitkan. Program ini ditulis dalam Rust dan menggunakan subsistem eBPF kernel Linux untuk mencegat paket jaringan (IPv4/TCP/UDP) dan frame Ethernet dengan dampak kinerja minimal. Program ini mendukung inspeksi mendalam terhadap protokol lapisan aplikasi (L7), seperti mengekstrak kueri TLS SNI dan DNS saat menganalisis lalu lintas terenkripsi. Sistem ini memelihara tabel status koneksi saat ini dalam format DashMap, menyimpan riwayat dalam SQLite, dan menyediakan statistik melalui API REST ke Prometheus.
  • Kemampuan untuk membuat aplikasi multithreaded dalam bahasa Rust menggunakan fungsi std::thread dan dieksekusi di sisi GPU telah diimplementasikan.

Sumber: opennet.ru