Kami sajikan kepada Anda terjemahan publikasi pada versi baru bahasa pemrograman Rust tercinta.
Pendahuluan
Tim pengembangan Rust dengan bangga mengumumkan rilis versi baru, 1.37.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.37.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?
Inovasi besar dalam Rust 1.37.0 mencakup tautan ke opsi enum
melalui alias tipe, cargo vendor
, konstanta tanpa nama, pengoptimalan berpemandu profil, kunci yang default-run
untuk proyek-proyek Kargo dan #[repr(align(N))]
untuk enumerasi. Lihat catatan rilis terperinci untuk informasi lebih lanjut.
Tautan ke opsi enum
melalui alias ketik
Dimulai dengan Rust 1.37.0, referensi opsi enum
dimungkinkan melalui tipe alias:
type ByteOption = Option<u8>; fn increment_or_zero(x: ByteOption) -> u8 { match x { ByteOption::Some(y) => y + 1, ByteOption::None => 0, } }
Di blok impl
Self
bertindak sebagai alias tipe, oleh karena itu di Rust 1.37.0 menjadi mungkin untuk merujuk ke opsi enumerasi menggunakan sintaks Self::Variant
:
impl Coin { fn value_in_cents(&self) -> u8 { match self { Self::Penny => 1, Self::Nickel => 5, Self::Dime => 10, Self::Quarter => 25, } } }
Lebih khusus lagi, sekarang Rust memungkinkan Anda untuk merujuk ke opsi enumerasi melalui "resolusi tipe-relatif" , <MyType<..>>::Variant
. Deskripsi yang lebih terperinci tersedia dalam laporan stabilisasi .
Dukungan Kargo Asli untuk Ketergantungan Vendor
Setelah beberapa tahun berdiri sebagai paket terpisah , tim cargo vendor
sekarang terintegrasi ke dalam Cargo. Perintah ini mengekstrak semua dependensi proyek Anda ke direktori vendor/
dan menunjukkan fragmen konfigurasi yang diperlukan untuk menggunakan kode vendor selama perakitan.
cargo vendor
sudah digunakan dalam proyek nyata: compiler rustc
menggunakannya untuk mengirim semua dependensinya untuk melepaskan tarball, dan proyek dengan repositori mono menggunakannya untuk memperbaiki kode dependensi dalam kontrol versi.
Menggunakan konstanta yang tidak disebutkan namanya dalam makro
Sekarang Anda dapat membuat (unnamed) (const
) tanpa nama dengan mengganti pengenalnya dengan garis bawah ( _
). Misalnya, dalam kompiler rustc
kami menemukan kode ini:
Perhatikan static_assert_size!(..)
kedua static_assert_size!(..)
: berkat penggunaan konstanta yang tidak disebutkan namanya, menjadi mungkin untuk mencegah konflik nama saat mendeklarasikan elemen baru. Sebelumnya Anda harus menulis static_assert_size!(MY_DUMMY_IDENTIFIER, usize, 8);
. Dengan diperkenalkannya konstanta yang tidak disebutkan namanya, menjadi lebih mudah untuk membuat makro deklaratif dan prosedural yang ergonomis dan dapat digunakan kembali untuk keperluan analisis statis.
Pengoptimalan berpandu profil
Profile-Guided Optimization (PGO) sekarang tersedia di rustc
compiler, yang dapat diaktifkan melalui flag -C profile-generate
dan -C profile-use
compiler -C profile-use
.
Profile-Guided Optimization adalah teknik optimisasi perangkat lunak kompiler yang menganalisis uji coba alih-alih kode sumber. Ia bekerja dengan menyusun program untuk optimasi dalam dua tahap:
- Pertama, program dibuat menggunakan alat yang dibangun ke dalam kompiler. Ini dilakukan dengan melewati flag
rustc
-C profile-generate
. Kemudian program alat harus dijalankan pada sampel data dan selanjutnya akan menulis profil data ke file. - Program kemudian
rustc
lagi , kali ini meneruskan data profil yang dikumpulkan kembali ke rustc
menggunakan flag -C profile-use
menggunakan -C profile-use
. Majelis ini akan menggunakan data yang dikumpulkan untuk memungkinkan kompiler membuat keputusan yang lebih baik tentang penempatan kode, penyematan, dan optimisasi lainnya.
Untuk informasi lebih lanjut tentang Optimalisasi yang Dipandu Profil, lihat bab terkait dalam buku penyusun rustc .
Memilih file yang dapat dieksekusi dalam proyek Cargo
cargo run
adalah alat yang sangat mudah untuk menguji aplikasi konsol dengan cepat. Ketika beberapa file yang dapat dieksekusi hadir dalam satu paket, Anda harus secara eksplisit mendeklarasikan nama file yang dapat dieksekusi yang ingin Anda jalankan menggunakan flag --bin
. Hal ini membuat cargo run
tidak ergonomis seperti yang kita inginkan, terutama ketika executable tertentu lebih sering dipanggil daripada yang lain.
Rust 1.37.0 menyelesaikan masalah ini dengan menambahkan kunci default-run
baru ke Cargo.toml
(bagian [package]
). Jadi, jika flag --bin
tidak --bin
, Cargo akan meluncurkan file biner yang dinyatakan dalam konfigurasi.
#[repr(align(N))]
untuk enumerasi
Dimulai dengan Rust 1.37.0, atribut #[repr(align(N))]
dapat digunakan untuk menentukan perataan enumerasi dalam memori (sebelumnya atribut ini hanya diperbolehkan untuk struktur ( struct
) dan serikat pekerja ( union
)). Misalnya, enumerasi Align16
akan, seperti yang diharapkan, memiliki perataan 16
byte, sedangkan perataan alami tanpa #[repr(align(16))]
akan menjadi 4
:
#[repr(align(16))] enum Align16 { Foo { foo: u32 }, Bar { bar: u32 }, }
Semantik menggunakan #[repr(align(N))
untuk enumerasi sama dengan mendefinisikan pembungkus untuk struktur AlignN<T>
dengan penyelarasan ini, dan kemudian menggunakan AlignN<MyEnum>
:
#[repr(align(N))] struct AlignN<T>(T);
Perubahan ke Perpustakaan Standar
Karat 1.37.0 menstabilkan komponen pustaka standar berikut:
Perubahan lainnya
Sintaks , manajer paket kargo, dan penganalisa Clippy juga telah mengalami beberapa perubahan.
Anggota 1.37.0
Banyak orang datang bersama untuk membuat Rust 1.37.0. Kami tidak bisa melakukan ini tanpa kalian semua, terima kasih!
Kami ingin mengucapkan terima kasih kepada dua sponsor infrastruktur Rust baru yang menyediakan sumber daya yang diperlukan untuk membangun Rust 1.37.0: Amazon Web Services (AWS) dan Microsoft Azure:
- AWS menyediakan hosting untuk artefak rilis (kompiler, perpustakaan, alat, dan kode sumber), memberikan akses ke artefak ini kepada pengguna melalui CloudFront, mencegah regresi EC2 dari Crater, dan mengelola infrastruktur lain yang terkait dengan Karat yang diinangi di AWS.
- Untuk pengujian yang sangat menuntut repositori rust-lang / rust, Microsoft Azure menyediakan pembangun.
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 , ozkriff , funkill , dan Gymmasssorla .