Keluaran bahasa pengaturcaraan Rust 1.39

diterbitkan keluaran bahasa pengaturcaraan sistem Karat 1.39, diasaskan oleh projek Mozilla. Bahasa ini memfokuskan pada keselamatan memori, menyediakan pengurusan memori automatik dan menyediakan cara untuk mencapai keselarian tugas yang tinggi tanpa menggunakan pengumpul sampah atau masa jalan.

Pengurusan memori automatik Rust menyelamatkan pembangun daripada memanipulasi penunjuk dan melindungi daripada masalah yang timbul daripada manipulasi memori peringkat rendah, seperti mengakses kawasan memori selepas ia dibebaskan, membatalkan penunjuk nol, overrun penimbal, dsb. Untuk mengedarkan perpustakaan, memastikan pemasangan dan mengurus kebergantungan, projek membangunkan pengurus pakej Cargo, yang membolehkan anda mendapatkan perpustakaan yang anda perlukan untuk program dalam satu klik. Repositori disokong untuk mengehos perpustakaan crates.io.

Utama inovasi:

  • Distabilkan sintaks pengaturcaraan tak segerak baharu berdasarkan fungsi "async", blok async move { ... } dan operator ".await", yang memudahkan untuk menulis pengendali yang tidak menyekat aliran arahan utama. Berbanding dengan API yang ditawarkan sebelum ini untuk I/O tak segerak, binaan async/.await mudah difahami, sangat boleh dibaca dan membolehkan anda melaksanakan interaksi tak segerak yang kompleks menggunakan teknik kawalan aliran biasa berdasarkan gelung, pernyataan bersyarat dan pengecualian.

    Sintaks Async-await membolehkan anda mencipta fungsi yang boleh menjeda pelaksanaannya, mengembalikan kawalan ke utas utama, dan kemudian menyambung semula pelaksanaan dari tempat ia berhenti. Sebagai contoh, jeda sedemikian diperlukan semasa memproses I/O, di mana kerja lain boleh dilakukan sementara menunggu sekeping data seterusnya tiba. Fungsi dan blok yang ditakrifkan dengan "async fn" dan "async move" mengembalikan sifat Masa depan, yang mentakrifkan perwakilan pengiraan tak segerak tertunda. Anda boleh terus memulakan pengiraan tertunda dan mendapatkan hasilnya menggunakan pengendali ".await". Tiada tindakan dilakukan atau pra-rancangan sehingga .wait dipanggil, membenarkan binaan bersarang kompleks dibuat tanpa overhed tambahan.

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

  • Distabilkan "#![feature(bind_by_move_pattern_guards)]", membenarkan penggunaan pembolehubah dengan jenis mengikat "dengan-gerak" dalam templat dan gunakan rujukan kepada pembolehubah ini dalam bahagian "jika" ungkapan "sepadan dengan". Sebagai contoh, pembinaan berikut kini dibenarkan:

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

    tatasusunan padan {
    bilangan
    jika nums.iter().sum::() == 10

    => {
    drop(bilangan);
    }
    _ => tidak boleh dihubungi!(),
    }
    }

  • Petunjuk dibenarkan sifat-sifat apabila mentakrifkan parameter fungsi, penutupan dan penunjuk fungsi. Atribut kompilasi bersyarat (cfg, cfg_attr) yang mengawal diagnostik melalui lint (membenarkan, memberi amaran, menafikan dan melarang) dan atribut panggilan makro tambahan disokong.

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

  • Amaran tentang masalah yang dikenal pasti semasa menyemak peminjaman pembolehubah (pemeriksa pinjaman) menggunakan teknik NLL (Non-Lexical Lifetimes), diterjemahkan ke dalam kategori kesilapan yang membawa maut. Mari kita ingat bahawa sistem pengesahan berdasarkan mekanisme baharu untuk mengambil kira jangka hayat pembolehubah yang dipinjam membolehkan untuk mengenal pasti beberapa masalah yang tidak disedari oleh kod pengesahan lama. Memandangkan output ralat untuk semakan sedemikian boleh menjejaskan keserasian dengan kod yang berfungsi sebelum ini, amaran pada mulanya dikeluarkan dan bukannya ralat. Amaran kini telah digantikan dengan ralat semasa berjalan dalam mod Rust 2018. Dalam keluaran seterusnya, output ralat juga akan dilaksanakan dalam mod Rust 2015, yang akhirnya akan menyingkirkan pemeriksa pinjaman lama;
  • Atribut "const", yang menentukan kemungkinan menggunakan dalam mana-mana konteks dan bukannya pemalar, digunakan untuk fungsi Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bait,
    abs, wrapping_abs dan overflowing_abs;

  • Bahagian baharu API telah dipindahkan ke kategori stabil, termasuk kaedah yang telah distabilkan
    Pin::dalam_dalam, Segera::ditanda_tempoh_sejak dan Segera::menepu_durasi_sejak;

  • Pengurus pakej kargo kini mempunyai keupayaan untuk menggunakan sambungan ".toml" untuk fail konfigurasi. Menambah sokongan awal untuk membina perpustakaan standard terus daripada Cargo. Menambahkan bendera "--workspace", menggantikan bendera "--all" yang kontroversi. Medan baharu telah ditambahkan pada metadata "menyiarkanβ€œ, yang membolehkan anda menerbitkan kebergantungan dengan menentukan tag git dan nombor versi. Menambahkan pilihan ujian "-Ztimings" untuk menjana laporan HTML tentang masa pelaksanaan pelbagai peringkat penyusunan.
  • Dalam pengkompil rustc, mesej diagnostik termasuk pemangkasan ekor kod yang tidak sesuai dengan terminal. Menyediakan tahap sokongan ketiga untuk platform sasaran
    i686-unknown-uefi dan sparc64-unknown-openbsd. Tahap ketiga melibatkan sokongan asas, tetapi tanpa ujian automatik dan penerbitan binaan rasmi.

Sumber: opennet.ru

Tambah komen