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();
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 .
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