Rilis Bahasa Pemrograman Rust 1.39

diterbitkan rilis bahasa pemrograman sistem Karat 1.39, didirikan oleh proyek Mozilla. Bahasa ini berfokus pada keamanan memori, menyediakan manajemen memori otomatis, dan menyediakan sarana untuk mencapai paralelisme tugas yang tinggi tanpa menggunakan pengumpul sampah atau 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:

  • Stabil sintaks pemrograman asinkron baru berdasarkan fungsi "async", blok async move { ... }, dan operator ".await", yang memudahkan penulisan penangan yang tidak memblokir aliran perintah utama. Dibandingkan dengan API yang ditawarkan sebelumnya untuk I/O asinkron, konstruksi async/.await mudah dipahami, sangat mudah dibaca, dan memungkinkan Anda mengimplementasikan interaksi asinkron yang kompleks menggunakan teknik kontrol aliran yang sudah dikenal berdasarkan loop, pernyataan kondisional, dan pengecualian.

    Sintaks Async-await memungkinkan Anda membuat fungsi yang dapat menghentikan sementara eksekusinya, mengembalikan kontrol ke thread utama, dan kemudian melanjutkan eksekusi dari titik terakhirnya. Misalnya, jeda seperti itu diperlukan saat memproses I/O, sehingga pekerjaan lain dapat dilakukan sambil menunggu potongan data berikutnya tiba. Fungsi dan blok yang didefinisikan dengan "async fn" dan "async move" mengembalikan suatu sifat Masa depan, yang mendefinisikan representasi komputasi asinkron yang ditangguhkan. Anda dapat langsung memulai penghitungan yang ditangguhkan dan mendapatkan hasilnya menggunakan operator β€œ.await”. Tidak ada tindakan yang dilakukan atau direncanakan sebelumnya hingga .await dipanggil, sehingga konstruksi bertingkat yang kompleks dapat dibuat tanpa overhead tambahan.

    async fn fungsi_pertama() -> u32 { .. }
    ...
    biarkan masa depan = fungsi_pertama();
    ...
    biarkan hasilnya: u32 = masa depan.menunggu;

  • Stabil "#![feature(bind_by_move_pattern_guards)]", mengizinkan penggunaan variabel dengan tipe pengikatan "langkah demi langkah" di templat dan gunakan referensi ke variabel ini di bagian "jika" pada ekspresi "pertandingan". Misalnya, konstruksi berikut sekarang diperbolehkan:

    fn utama() {
    biarkan array: Kotak<[u8; 4]> = Kotak::baru([1, 2, 3, 4]);

    cocok dengan susunan {
    nums
    jika angka.iter().jumlah::() == 10

    => {
    jatuhkan(angka);
    }
    _ => tidak dapat dijangkau!(),
    }
    }

  • Indikasi diperbolehkan atribut saat mendefinisikan parameter fungsi, penutupan, dan penunjuk fungsi. Atribut kompilasi bersyarat (cfg, cfg_attr) yang mengontrol diagnostik melalui lint (mengizinkan, memperingatkan, menolak, dan melarang) serta atribut pemanggilan makro tambahan didukung.

    fn len(
    #[cfg(windows)] irisan: &[u16], // gunakan parameter di Windows
    #[cfg(not(windows))] irisan: &[u8], // digunakan di OS lain
    ) -> gunakan {
    irisan.len()
    }

  • Peringatan tentang masalah yang teridentifikasi saat memeriksa peminjaman variabel (borrow checker) menggunakan teknik NLL (Non-Lexical Lifetimes), diterjemahkan masuk dalam kategori kesalahan fatal. 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. Peringatan kini telah diganti dengan kesalahan saat dijalankan dalam mode Rust 2018. Pada rilis berikutnya, keluaran kesalahan juga akan diimplementasikan dalam mode Rust 2015, yang pada akhirnya akan menghilangkan pemeriksa pinjaman lama;
  • Atribut β€œconst”, yang menentukan kemungkinan penggunaan dalam konteks apa pun alih-alih konstanta, digunakan untuk fungsi Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrap_abs dan overflow_abs;

  • Sebagian API baru telah dipindahkan ke kategori stabil, termasuk metode yang telah distabilkan
    Pin::into_inner, Instan::checked_duration_since dan Instan::saturating_duration_since;

  • Manajer paket kargo sekarang memiliki kemampuan untuk menggunakan ekstensi β€œ.toml” untuk file konfigurasi. Menambahkan dukungan awal untuk membangun perpustakaan standar langsung dari Cargo. Menambahkan tanda "--workspace", menggantikan tanda "--all" yang kontroversial. Bidang baru telah ditambahkan ke metadata "menerbitkanβ€œ, yang memungkinkan Anda mempublikasikan dependensi dengan menentukan tag git dan nomor versi. Menambahkan opsi pengujian "-Ztimings" untuk menghasilkan laporan HTML tentang waktu eksekusi berbagai tahapan kompilasi.
  • Dalam kompiler Rustc, pesan diagnostik mencakup pemotongan bagian belakang kode yang tidak sesuai dengan terminal. Memberikan dukungan tingkat ketiga untuk platform target
    i686-tidak diketahui-uefi dan sparc64-tidak diketahui-openbsd. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis dan publikasi versi resmi.

Sumber: opennet.ru

Tambah komentar