Tim Rust senang mengumumkan rilis versi baru, 1.39.0. Rust adalah bahasa pemrograman yang memungkinkan semua orang membuat perangkat lunak yang andal dan efisien.
Jika Anda menginstal versi Rust sebelumnya menggunakan rustup
, maka untuk meningkatkan ke versi 1.39.0 Anda hanya perlu menjalankan perintah berikut:
$ rustup update stable
Jika Anda belum menginstal rustup
, Anda dapat menginstalnya dari halaman terkait situs web kami, serta melihat catatan rilis terperinci di GitHub.
Apa yang termasuk dalam versi stabil 1.39.0
Inovasi yang paling signifikan termasuk .await
async
/ .await
, referensi bersama untuk nilai bergerak di match-guards
dan atribut parameter fungsi. Lihat catatan rilis terperinci untuk informasi lebih lanjut.
Dengan .await
, temui async fn
Sebelumnya di Rust 1.36.0, kami mengumumkan ketersediaan sifat Future
. Kemudian kami mencatat bahwa:
Kami berharap bahwa inovasi ini akan memungkinkan peti, perpustakaan, dan seluruh ekosistem populer untuk mempersiapkan .await
async
/ .await
, yang direncanakan akan distabilkan dalam waktu dekat.
Janji itu diberikan - janji itu dipenuhi. Kami dengan senang hati mengumumkan bahwa .await
async
/ .await
telah lama ditunggu-tunggu, yang memungkinkan kita untuk mendefinisikan fungsi dan blok async
( async
) dan menunggu eksekusi mereka ( .await
), akhirnya stabil!
Fungsi asinkron yang didefinisikan menggunakan sintaks async fn
(bukan fn
biasa) tidak melakukan apa pun kecuali ketika dipanggil, ia mengembalikan objek yang mengimplementasikan sifat Future
. Objek ini adalah perhitungan yang ditangguhkan, yang dapat dilengkapi dengan sintaks .await
. Selain itu, async fn
, async { ... }
dan async move { ... }
bertindak sebagai penutup dan dapat digunakan untuk mendefinisikan literal asinkron.
Anda dapat membaca lebih lanjut tentang rilis async
/ .await
di posting blog Niko Matsakis .
Tautan yang dibagikan ke nilai jelajah di match-guards
Saat mencocokkan gambar, variabel yang dikenal sebagai penjilidan dapat diikat dengan salah satu cara berikut:
Dengan referensi, tidak berubah atau tidak bisa berubah. Ini dapat dilakukan secara eksplisit, misalnya, masing-masing dengan sintaks ref my_var
atau ref mut my_var
. Hampir selalu, mode jepretan akan ditampilkan secara otomatis.
Berdasarkan nilai - baik dengan menyalin (jika jenis variabel terikat menerapkan sifat Copy
), atau dengan mentransfernya ke kepemilikan .
Sekarang diizinkan untuk menggunakan variabel templat di if-constraint templat, jika kepemilikan ditransfer ke variabel ini (mis. Variabel dalam templat bind-by-move). Sebelumnya, kode berikut ini akan dibuang:
fn main() { let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]); match array { nums
Dimulai dengan Rust 1.39.0 , kompiler akan menerima fragmen di atas tanpa peringatan dan kesalahan. Kami berharap bahwa inovasi ini akan meningkatkan kegunaan ekspresi match
.
Atribut untuk parameter fungsi
Dimulai dengan Rust 1.39.0, atribut dapat diterapkan ke parameter fungsi, penutupan, dan pointer fungsi. Sebelumnya, fungsi len()
dapat direpresentasikan sebagai berikut:
#[cfg(windows)] fn len(slice: &[u16]) -> usize { slice.len() } #[cfg(not(windows))] fn len(slice: &[u8]) -> usize { slice.len() }
Tetapi Rust 1.39.0 membuat penulisan kode di atas menjadi lebih mudah:
fn len( #[cfg(windows)] slice: &[u16],
Atribut yang dapat digunakan meliputi:
Kompilasi bersyarat: cfg
dan cfg_attr
;
Periksa manajemen: allow
, warn
, deny
, dan forbid
;
Atribut pembantu yang digunakan oleh makro atribut prosedural untuk elemen sintaks.
Kami berharap bahwa inovasi ini akan membantu ekosistem menulis DSL berbasis makro yang lebih ekspresif.
Peringatan migrasi cek pinjam menjadi bug serius di Rust 2018
Dalam rilis 1.35.0, kami mengumumkan bahwa penganalisis pinjaman baru (NLL) datang ke editor Rust 2015 setelah dirilis ke editor Rust 2018 dalam versi 1.31 .
Seperti yang dinyatakan dalam rilis 1.35.0, analisa pinjaman sebelumnya dirancang dengan bug yang memungkinkan penggunaan memori tidak aman. Kesalahan ini diperbaiki menggunakan penganalisis baru yang mengimplementasikan NLL. Karena perbaikan ini dapat merusak kode kerja, tim Rust memutuskan untuk memperkenalkan mereka secara bertahap, memverifikasi bahwa penganalisa sebelumnya harus menerima kode, yang akan ditolak oleh penganalisis baru. Jika demikian, maka kesalahannya malah akan menjadi peringatan.
Dimulai dengan Rust 1.39.0, peringatan ini sekarang adalah bug dalam edisi Rust 2018 .
Dalam rilis berikutnya dari Rust 1.40.0, aturan ini juga akan diterapkan pada kode revisi Rust 2015 , yang akan sepenuhnya menghilangkan analisa pinjaman lama dari kompiler.
Jika Anda terpengaruh oleh perubahan ini, atau ingin tahu lebih banyak, lihat posting blog Niko Matsakis .
Lebih banyak fungsi konstan di perpustakaan standar
Dimulai dengan Rust 1.39.0, fungsi-fungsi berikut ditandai sebagai const fn
( const fn
):
Fungsi stabil di perpustakaan standar
Fungsi-fungsi berikut telah distabilkan di Rust 1.39.0:
Perubahan lainnya
Sintaks , manajer paket kargo, dan penganalisa Clippy juga telah mengalami beberapa perubahan.
Baca catatan kompatibilitas untuk melihat apakah perubahan ini memengaruhi Anda.
Anggota 1.39.0
Banyak orang datang bersama untuk membuat Rust 1.39.0. Kami tidak bisa melakukan ini tanpa kalian semua, terima kasih !
Dari penerjemah
Dengan pertanyaan tentang bahasa Rust, mereka akan dapat membantu Anda dalam obrolan Telegram berbahasa Rusia atau dalam obrolan serupa untuk pendatang baru .
Artikel ini diterjemahkan bersama oleh andreevlex , blandger , funkill dan Hippolot .