Rilis Bahasa Pemrograman Rust 1.38

diterbitkan rilis bahasa pemrograman sistem Karat 1.38, 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:

  • Menambahkan mode kompilasi pipeline (pipelined), di mana pembuatan paket peti dependen dimulai segera setelah metadata dependensi tersedia, tanpa menunggu kompilasi selesai. Saat mengkompilasi sebuah paket, dependensi tidak perlu dirakit sepenuhnya, cukup mendefinisikan metadata, yang mencakup daftar tipe, dependensi, dan elemen yang diekspor. Metadata tersedia di awal proses kompilasi, sehingga paket tertaut kini dapat dikompilasi jauh lebih awal. Saat membuat paket tunggal, mode yang diusulkan tidak memengaruhi kinerja, tetapi jika build mencakup paket dengan dependensi bercabang, keseluruhan waktu build dapat dikurangi 10-20%;
  • Memastikan deteksi penggunaan fungsi yang salah std::mem::tidak diinisialisasi ΠΈ std::mem::dipusatkan. Misalnya, std::mem::uninitialized berguna untuk membuat array dengan cepat, tetapi ini menyesatkan kompiler karena tampaknya diinisialisasi, tetapi kenyataannya nilainya tetap tidak diinisialisasi. Fungsi mem::uninitialized sudah ditandai sebagai tidak digunakan lagi dan direkomendasikan untuk menggunakan tipe perantara MungkinUnit. Sedangkan untuk mem::zeroed, fungsi ini dapat menyebabkan masalah dengan tipe yang tidak dapat menerima nilai nol.

    Untuk membantu mengidentifikasi perilaku tidak terdefinisi, rilis baru menambahkan pemeriksaan lint ke compiler yang mendeteksi beberapa masalah dengan mem::uninitialized atau mem::zeroed. Misalnya, Anda sekarang mendapatkan kesalahan saat mencoba menggunakan mem::uninitialized atau mem::zeroed dengan tipe &T dan Boxβ€ΉTβ€Ί, yang mewakili objek penunjuk yang tidak dapat menerima nilai nol;

  • Atribut β€œ#[deprecated]” telah diperluas untuk memungkinkan paket peti ditandai sebagai usang dan dijadwalkan untuk dihapus di masa mendatang. Pada Rust 1.38, atribut ini juga dapat digunakan untuk makro;
  • Menambahkan kemampuan untuk menggunakan atribut β€œ#[global_allocator]” di submodul;
  • Fitur tambahan std::apa saja::type_name, yang memungkinkan Anda mengetahui nama tipenya, yang dapat berguna untuk tujuan debugging. Misalnya, selama eksekusi program, Anda dapat mengetahui jenis fungsi yang dipanggil:

    fn gen_valueβ€ΉT: Default>() -β€Ί T {
    println!("Menginisialisasi instance {}", std::any::type_name::β€ΉTβ€Ί());
    Bawaan::bawaan()
    }

    fn utama() {
    misalkan _: i32 = gen_value(); # "i32" akan dicetak
    biarkan _: String = gen_value(); # akan mencetak "alloc::string::String"
    }

  • Fungsi tambahan dari perpustakaan standar:
    • slice::{concat, connect, join} sekarang dapat mengambil nilai &[T] selain &T;
    • "*const T" dan "*mut T" sekarang mengimplementasikan marker::Unpin;
    • "Arcβ€Ή[T]β€Ί" dan "Rcβ€Ή[T]β€Ί" sekarang mengimplementasikan FromIteratorβ€ΉTβ€Ί;
    • iter::{StepBy, Peekable, Take} sekarang mengimplementasikan DoubleEndedIterator.
    • ascii::EscapeDefault mengimplementasikan Klon dan Tampilan.
  • Sebagian API baru telah dipindahkan ke kategori stabil, termasuk metode yang telah distabilkan
    • β€Ή*const Tβ€Ί::pemeran, β€Ή*mut Tβ€Ί::pemeran,
    • Durasi::as_secs_f{32|64},
    • Durasi::div_duration_f{32|64},
    • Durasi::div_f{32|64},
    • Durasi::from_secs_f{32|64},
    • Durasi::mul_f{32|64},
    • operasi pembagian dengan sisanya
      div_euclid dan rem_euclid untuk semua bilangan bulat primitif;

  • Menambahkan dukungan untuk menentukan opsi β€œ--features” beberapa kali untuk mengaktifkan fitur berbeda di pengelola paket kargo;
  • Kompiler menyediakan yang ketiga tingkat dukungan untuk platform target aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc target, armv7-unknown-linux -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl dan riscv32i-unknown-none-elf. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis dan publikasi versi resmi.

Sumber: opennet.ru

Tambah komentar