Tim pengembangan Rust dengan bangga mengumumkan rilis versi baru Rust, 1.33.0. Rust adalah bahasa pemrograman yang memungkinkan semua orang membuat perangkat lunak yang andal dan efisien.
Jika Anda memiliki versi Rust sebelumnya yang diinstal menggunakan rustup
, maka untuk meningkatkan versi Rust ke versi 1.33.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.33.0 tersedia di GitHub.
Apa yang termasuk dalam versi stabil 1.33.0
Peningkatan besar dari rilis ini: ekspansi kemampuan const fn
signifikan dan stabilisasi Pin API baru.
Memperluas kemampuan const fn
const fn
sekarang dapat melakukan lebih banyak lagi , yaitu:
- pencocokan pola tanpa syarat (tak terbantahkan) (misalnya,
const fn foo((x, y): (u8, u8)) { ... }
) let
binding (mis. let x = 1;
)- binding
let
dapat diubah (mis. let mut x = 1;
) - ekspresi penugasan (misalnya
x = y
) dan operator penugasan (misalnya x += y
), termasuk penugasan untuk proyeksi (misalnya, bidang struktur atau hasil dari operator pengindeksan - x[3] = 42
) - pernyataan ekspresi (mis.
3;
)
Sekarang Anda dapat memanggil "const unsafe fn" dari "const fn" , misalnya:
const unsafe fn foo() -> i32 { 5 } const fn bar() -> i32 { unsafe { foo() } }
Berkat peningkatan ini, menjadi mungkin untuk mendeklarasikan sejumlah besar fungsi standar perpustakaan secara konstan. Mereka tercantum di bawah ini di bagian perpustakaan.
Pin API
Masalah ini memperkenalkan mekanisme baru ke dalam bahasa, diperkenalkan ketik std :: pin :: Pin dan jenis penanda Lepas sematan . Gagasan utama dijelaskan secara rinci dalam dokumentasi "std :: pin" dari modul :
Terkadang bermanfaat untuk melarang pergerakan suatu objek, mis. menjamin keabadian alamatnya dalam memori. Skenario utama untuk menggunakan fitur ini adalah struktur referensi-sendiri, karena memindahkan objek tersebut akan menyebabkan pointer tidak valid, yang dapat menyebabkan perilaku tidak terdefinisi (UB).
Pin<P>
memastikan bahwa objek yang dirujuk oleh sembarang pointer tipe P
memiliki lokasi tetap dalam memori, mis. dia tidak bisa dipindahkan dan ingatannya tidak bisa dibebaskan. Nilai-nilai seperti itu disebut "disematkan".
Diharapkan bahwa mekanisme ini akan digunakan terutama oleh para penulis perpustakaan, sehingga kami tidak akan masuk lebih dalam ke detail sekarang (yang dapat ditemukan dalam dokumentasi di tautan di atas). Namun, stabilisasi API ini merupakan peristiwa penting bagi semua pengguna Rust, karena ini merupakan langkah kunci menuju async
/ await
sangat dinanti. Status pekerjaan yang tersisa dalam arah ini dapat dipantau di areweasyncyet.rs .
Impor sebagai "_"
Sekarang Anda dapat mengimpor entitas sebagai "_" . Ini memungkinkan Anda untuk mengimpor implementasi tipe tanpa memasukkan namanya di namespace saat ini, misalnya:
use std::io::Read as _;
Lihat catatan rilis untuk lebih jelasnya.
Stabilisasi perpustakaan standar
Berikut adalah daftar segala sesuatu yang menjadi konstan:
- Metode overflowing_ {add, sub, mul, shl, shr} dari semua tipe numerik sekarang konstan.
- Metode rotate_left, rotate_right, dan wrapping_ {add, sub, mul, shl, shr} dari semua tipe numerik sekarang konstan.
- Metode is_positive dan is_negative dari semua tipe numerik yang ditandatangani sekarang konstan.
- Metode get semua jenis NonZero sekarang konstan.
- Metode count_ones, count_zeros, leading_zeros, trailing_zeros, swap_bytes, from_be, from_le, to_be, to_le dari semua tipe numerik sekarang konstan.
- Metode Ipv4Addr :: baru sekarang konstan.
Selain itu, API berikut ini distabilkan:
Lihat catatan rilis untuk lebih jelasnya.
Peningkatan Kargo
Cargo sekarang memasang kembali peti jika salah satu file-nya dimodifikasi pada awal pembuatan.
Lihat catatan rilis untuk lebih jelasnya.
Crates.io
Seperti yang diumumkan sebelumnya , dimulai dengan rilis ini, crates.io akan memerlukan alamat email konfirmasi untuk memposting krat. Mulai dari 2019-03-01 00:00 UTC, pelaksanaan cargo publish
akan gagal dengan akun tanpa surat terverifikasi.
Ini diperlukan untuk memenuhi persyaratan DMCA . Jika Anda tidak melihat peringatan tentang hal ini yang ditulis kargo dalam rilis terbaru, buka crates.io/me untuk mengindikasikan dan mengkonfirmasi email Anda. Alamat surat ini tidak akan pernah dipublikasikan dan akan digunakan secara eksklusif untuk fungsionalitas langsung crates.io.
Pengembang 1.33.0
Banyak orang bersama-sama menciptakan Rust 1.33. Kami tidak dapat menyelesaikan pekerjaan tanpa Anda masing-masing. Terima kasih