Rilis Bahasa Pemrograman Rust 1.40

diterbitkan rilis bahasa pemrograman sistem Karat 1.40, didirikan oleh proyek Mozilla. Bahasa ini berfokus pada keamanan memori, menyediakan manajemen memori otomatis, dan menyediakan alat untuk mencapai paralelisme tugas yang tinggi tanpa menggunakan pengumpul sampah dan runtime.

Manajemen memori otomatis Rust membebaskan pengembang dari manipulasi penunjuk dan melindungi dari masalah yang timbul dari manipulasi memori tingkat rendah, seperti akses memori setelah bebas, dereferensi penunjuk nol, buffer overruns, dan sejenisnya. Manajer paket sedang dikembangkan untuk mendistribusikan perpustakaan, memastikan perakitan dan mengelola ketergantungan oleh proyek. Muatan, memungkinkan Anda mendapatkan perpustakaan yang diperlukan untuk program dalam satu klik. Repositori didukung untuk menghosting perpustakaan peti.io.

Utama inovasi:

  • Menambahkan kemampuan untuk menandai struktur (struct) dan enumerasi (enum dengan blok Variant) menggunakan atribut "#[tidak_lengkap]", yang memungkinkan di masa depan, tambahkan bidang dan opsi baru ke struktur dan enumerasi yang dideklarasikan. Misalnya, pengembang modul yang memiliki struktur dengan kolom yang dideklarasikan secara publik dapat menggunakan "#[non_exhaustive]" untuk menandai struktur yang mungkin memiliki kolom baru yang ditambahkan di masa mendatang. Hingga saat ini, dalam situasi ini, pengembang terpaksa memilih antara mendeklarasikan bidang secara pribadi atau mengikat ke daftar bidang yang tidak dapat diubah. Atribut baru menghilangkan batasan ini dan memungkinkan Anda menambahkan kolom baru di masa mendatang tanpa risiko merusak kode eksternal yang telah dikompilasi sebelumnya. Dalam paket peti, ketika mencocokkan opsi di bagian "cocok", definisi eksplisit dari topeng "_ => {...}" diperlukan, yang mencakup kemungkinan bidang di masa depan, jika tidak, kesalahan akan ditampilkan saat menambahkan bidang baru.
  • Ditambahkan kemampuan untuk memanggil makro prosedural mac!() dalam konteks tipe. Misalnya, Anda sekarang dapat menulis β€œtype Foo = expand_to_type!(bar);” jika β€œexpand_to_type” adalah makro prosedural.
  • Di blok "ekstern {... }". ditambahkan kemampuan untuk menggunakan makro prosedural dan atribut, termasuk makro β€œbang!()”, misalnya:

    aturan_makro! make_item { ($nama:ident) => { fn $nama(); } }

    luar {
    buat_item!(alfa);
    buat_item!(beta);
    }

    eksternal "C" {
    #[my_identity_macro] fn foo();
    }

  • Di makro diimplementasikan kemampuan untuk menghasilkan elemen β€œmacro_rules!”. Menghasilkan "aturan_makro!" mungkin baik dalam makro mirip fungsi (β€œmac!()”) dan makro dalam bentuk atribut (β€œ#[mac]”).
  • Dalam elemen pemetaan $m:meta ditambahkan dukungan untuk nilai enumerasi token arbitrer (β€œ[TOKEN_STREAM]”, β€œ{TOKEN_STREAM}” dan β€œ(TOKEN_STREAM)”), misalnya:

    aturan_makro! terima_meta { ($m:meta) => {} }
    terima_meta!( my::path );
    terima_meta!( my::path = "lit" );
    terima_meta!( my::path ( abc ) );
    terima_meta!( my::path [ abc ] );
    terima_meta!( my::path { abc } );

  • Dalam mode Rust 2015, output kesalahan diaktifkan untuk masalah yang diidentifikasi saat memeriksa peminjaman variabel (borrow checker) menggunakan teknik NLL (Non-Lexical Lifetimes). Sebelumnya, peringatan diganti dengan kesalahan saat dijalankan dalam mode Rust 2018.
    Setelah perubahan diperluas ke mode Rust 2015, pengembang akhirnya dapat melakukannya singkirkan dari pemeriksa pinjaman lama.

    Mari kita ingat bahwa sistem verifikasi yang didasarkan pada mekanisme baru untuk memperhitungkan umur variabel yang dipinjam memungkinkan untuk mengidentifikasi beberapa masalah yang luput dari perhatian oleh kode verifikasi lama. Karena keluaran kesalahan untuk pemeriksaan tersebut dapat memengaruhi kompatibilitas dengan kode yang berfungsi sebelumnya, peringatan awalnya dikeluarkan, bukan kesalahan.

  • Atribut β€œconst”, yang menentukan kemungkinan menggunakannya dalam konteks apa pun alih-alih konstanta, digunakan untuk fungsi is_power_of_two (untuk bilangan bulat yang tidak ditandatangani).
  • Bagian baru API telah dipindahkan ke kategori stabil, termasuk makro todo!() dan metode slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, telah distabilkan.
    Opsi::as_deref, Opsi::as_deref_mut, Opsi::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes, dan {f32,f64}::from_ne_bytes.

  • Di manajer paket kargo
    diimplementasikan menyimpan peringatan kompiler pada disk. Menambahkan opsi "metadata kargo" ke perintah "metadata kargo".--filter-platform" untuk hanya menampilkan paket yang terikat pada platform target yang ditentukan di kolom resolusi ketergantungan. Menambahkan opsi konfigurasi versi http.ssl untuk menentukan versi TLS yang valid.
    Menambahkan kemampuan untuk mempublikasikan bagian "ketergantungan dev" tanpa menentukan kunci "versi".

  • Kompiler Rustc menyediakan dukungan tingkat ketiga untuk platform target thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 dan mips64el-unknown-linux-muslabi64. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis dan publikasi versi resmi.

Sumber: opennet.ru

Tambah komentar