Rust 1.28 Rilis

Tim pengembangan Rust dengan bangga mengumumkan rilis versi baru Rust: 1.28.0. Rust adalah bahasa pemrograman sistem yang ditujukan untuk keamanan, kecepatan, dan eksekusi kode paralel.


Jika Anda memiliki versi Rust yang diinstal sebelumnya menggunakan rustup, maka untuk meningkatkan versi Rust ke versi 1.28.0 Anda hanya perlu melakukan:


$ rustup update stable 

Jika Anda belum menginstal rustup, Anda dapat menginstalnya dari halaman yang sesuai di situs web kami. Catatan rilis terperinci untuk Rust 1.28.0 tersedia di GitHub.


Apa yang termasuk dalam versi stabil 1.28.0


Global Allocators


Menggunakan pengalokasi, program Rust mendapatkan memori pada saat dijalankan. Sebelumnya, Rust tidak mengizinkan mengubah cara memori dialokasikan, yang membatasi penggunaannya dalam beberapa kasus. Pada beberapa platform, jemalloc digunakan, pada yang lain - pengalokasi sistem, tetapi pengguna tidak dapat mengendalikannya. Dalam rilis 1.28.0, atribut #[global_allocator] distabilkan, yang memungkinkan program Rust untuk memilih pengalokasi sistem, serta mendefinisikan pengalokasi baru, menerapkan GlobalAlloc .


Alokasi default untuk program Rust pada beberapa platform adalah jemalloc. Pustaka standar sekarang menyediakan pegangan pengalokasi sistem yang dapat Anda gunakan untuk beralih menggunakan pengalokasi sistem, jika perlu, dengan deklarasi statis dengan atribut #[global_allocator] .


 use std::alloc::System; #[global_allocator] static GLOBAL: System = System; fn main() { let mut v = Vec::new(); //     . v.push(1); } 

Namun, terkadang Anda perlu menetapkan pengalokasi Anda sendiri untuk area fungsional spesifik aplikasi Anda. Ini juga relatif mudah dilakukan dengan menerapkan GlobalAlloc . Anda dapat membaca lebih lanjut tentang cara melakukan ini di dokumentasi .


Pesan kesalahan format yang ditingkatkan


Bekerja untuk meningkatkan diagnostik berlanjut, kali ini dengan penekanan pada pemformatan:


 format!("{_foo}", _foo = 6usize); 

Sebelumnya, pesan kesalahan di tempat ini agak sedikit:


 error: invalid format string: expected `'}'`, found `'_'` | 2 | format!("{_foo}", _foo = 6usize); | ^^^^^^^^ 

Sekarang pesan diagnostik baru menunjukkan alasan spesifik string format tidak valid:


 error: invalid format string: invalid argument name `_foo` | 2 | let _ = format!("{_foo}", _foo = 6usize); | ^^^^ invalid argument name in format string | = note: argument names cannot start with an underscore 

Lihat catatan rilis untuk lebih jelasnya.


Stabilisasi perpustakaan standar


Selain stabilisasi GlobalAlloc telah disebutkan, tipe angka NonZero distabilkan dalam rilis ini. Ini adalah tipe pembungkus di sekitar tipe integer standar yang tidak ditandatangani: NonZeroU8 , NonZeroU16 , NonZeroU32 , NonZeroU64 , NonZeroU128 dan NonZeroUsize .


Mereka memungkinkan Anda untuk mengoptimalkan ukuran data yang disimpan. Misalnya, Option<u8> membutuhkan dua byte, sedangkan Option<NonZeroU8> satu byte. Harap perhatikan bahwa pengoptimalan ini tetap ada bahkan ketika NonZeroU8 dibungkus di dalam struktur lain; contoh di bawah ini menunjukkan bahwa Door masih menempati satu byte, bahkan ketika itu ditempatkan di dalam Option . Pengoptimalan ini juga berlaku untuk penghitungan yang ditentukan pengguna; Option tidak spesial di sini.


 use std::mem; use std::num::NonZeroU8; struct Key(NonZeroU8); struct Door { key: Key, } fn main() { assert_eq!(mem::size_of::<Door>(), 1); assert_eq!(mem::size_of::<Option<Door>>(), 1); } 

Banyak komponen perpustakaan lain juga telah distabilkan, daftar lengkapnya dapat ditemukan di catatan rilis terperinci.


Peningkatan Kargo


Cargo tidak akan lagi mengizinkan Anda untuk mempublikasikan paket dengan skrip build yang memodifikasi direktori src. Direktori src dalam paket harus dianggap tidak berubah.


Pengembang 1.28.0


Banyak orang berpartisipasi dalam pengembangan Rust 1.28. Kami tidak dapat menyelesaikan pekerjaan tanpa Anda masing-masing. Terima kasih


Dari seorang penerjemah: Saya mengucapkan terima kasih kepada anggota komunitas ruRust dan secara pribadi ozkriff atas bantuan mereka dengan terjemahan dan proofreading

Source: https://habr.com/ru/post/id419259/


All Articles