Rilis Bahasa Pemrograman Rust 1.60

Rilis bahasa pemrograman tujuan umum Rust 1.60, yang didirikan oleh proyek Mozilla, tetapi sekarang dikembangkan di bawah naungan organisasi nirlaba independen Rust Foundation, telah diterbitkan. Bahasa berfokus pada keamanan memori dan menyediakan sarana untuk mencapai paralelisme pekerjaan yang tinggi sambil menghindari penggunaan pengumpul sampah dan runtime (runtime dikurangi menjadi inisialisasi dasar dan pemeliharaan perpustakaan standar).

Metode penanganan memori Rust menyelamatkan pengembang dari kesalahan saat memanipulasi pointer dan melindungi dari masalah yang muncul karena penanganan memori tingkat rendah, seperti mengakses area memori setelah dibebaskan, dereferencing null pointer, buffer overruns, dll. Untuk mendistribusikan pustaka, menyediakan build, dan mengelola dependensi, proyek mengembangkan manajer paket Cargo. Repositori crates.io didukung untuk hosting perpustakaan.

Keamanan memori disediakan di Rust pada waktu kompilasi melalui pemeriksaan referensi, melacak kepemilikan objek, melacak masa pakai objek (cakupan), dan menilai kebenaran akses memori selama eksekusi kode. Rust juga memberikan perlindungan terhadap integer overflow, membutuhkan inisialisasi wajib dari nilai variabel sebelum digunakan, menangani kesalahan dengan lebih baik di perpustakaan standar, menerapkan konsep referensi dan variabel yang tidak dapat diubah secara default, menawarkan pengetikan statis yang kuat untuk meminimalkan kesalahan logis.

Inovasi utama:

  • Kompiler Rustc memiliki sistem berbasis LLVM yang stabil untuk menghasilkan data cakupan yang digunakan untuk mengevaluasi cakupan kode selama pengujian. Untuk mengaktifkan data cakupan selama perakitan, Anda harus menggunakan tanda “-Cinstrument-coverage”, misalnya, memulai perakitan dengan perintah “RUSTFLAGS=”-C instrument-coverage” cargo build”. Setelah menjalankan file yang dapat dieksekusi yang dikompilasi dengan cara ini, file default.profraw akan disimpan di direktori saat ini, untuk pemrosesan yang Anda dapat menggunakan utilitas llvm-profdata dari komponen llvm-tools-preview. Output yang diproses oleh llvm-profdata kemudian dapat diteruskan ke llvm-cov untuk menghasilkan laporan cakupan kode beranotasi. Informasi tentang tautan ke kode sumber diambil dari file yang dapat dieksekusi yang sedang diperiksa, yang mencakup data yang diperlukan tentang hubungan antara penghitung cakupan dan kode. 1| 1|fn utama() { 2| 1| println!("Halo dunia!"); 3| 1|}
  • Di manajer paket kargo, dukungan untuk bendera “-timings” telah distabilkan, yang mencakup pembuatan laporan terperinci tentang kemajuan pembangunan dan waktu pelaksanaan setiap langkah. Laporan tersebut mungkin berguna untuk mengoptimalkan kinerja proses perakitan.
  • Manajer paket kargo menawarkan sintaks baru untuk mekanisme kompilasi bersyarat dan pemilihan dependensi opsional, dikonfigurasi dalam file Cargo.toml dengan mencantumkan daftar properti bernama di bagian [fitur] dan diaktifkan dengan mengaktifkan properti selama pembuatan paket menggunakan tanda “--features”. Versi baru menambahkan dukungan untuk dependensi di namespace terpisah dan dependensi lemah.

    Dalam kasus pertama, dimungkinkan untuk menggunakan elemen dengan awalan “dep:” di dalam bagian “[fitur]” untuk secara eksplisit menautkan ke ketergantungan opsional tanpa secara implisit mewakili ketergantungan ini sebagai fitur. Dalam kasus kedua, dukungan untuk menandai dengan tanda “?” telah ditambahkan. ("nama-paket?/nama-fitur") dependensi opsional yang hanya boleh disertakan jika beberapa properti lain menyertakan dependensi opsional yang diberikan. Misalnya, pada contoh di bawah, mengaktifkan properti serde akan mengaktifkan dependensi "serde", serta properti "serde" untuk dependensi "rgb", tetapi hanya jika dependensi "rgb" diaktifkan di tempat lain: [dependensi] serde = { versi = " 1.0.133", opsional = true } rgb = { versi = "0.8.25", opsional = true } [fitur] serde = ["dep:serde", "rgb?/serde"]

  • Dukungan untuk kompilasi tambahan, yang dinonaktifkan pada rilis terakhir, telah dikembalikan. Bug kompiler yang menyebabkan fitur dinonaktifkan telah teratasi.
  • Menyelesaikan beberapa masalah dengan menyediakan pengatur waktu Instan dengan jaminan pengaturan waktu yang monoton, yang memperhitungkan waktu yang dihabiskan oleh sistem dalam mode tidur. Sebelumnya, OS API digunakan bila memungkinkan untuk mengoperasikan pengatur waktu, yang tidak memperhitungkan situasi masalah yang memecah kemonotonan waktu, seperti masalah perangkat keras, penggunaan virtualisasi, atau kesalahan dalam sistem operasi.
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • Busur::siklik_baru
    • Rc::new_cyclic
    • irisan::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MungkinUninit::assume_init_drop
    • MungkinUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • ukuran::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • gunakan::abs_diff
    • Tampilan untuk io::ErrorKind
    • Dari untuk ExitCode
    • Tidak untuk ! (ketik "tidak pernah")
    • _Op_Penugasan<$t>
    • arch::is_aarch64_feature_detected!
  • Dukungan tingkat ketiga telah diterapkan untuk platform mips64-openwrt-linux-musl* dan armv7-unknown-linux-uclibceabi (softfloat). Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis, penerbitan versi resmi, atau pemeriksaan apakah kode dapat dibuat.
  • Kompiler telah dialihkan untuk menggunakan LLVM 14.

Selain itu, Anda dapat mencatat:

  • Menambahkan dukungan untuk bootstrap kompiler Rustc menggunakan backend Rustc_codegen_gcc, yang memungkinkan Anda menggunakan perpustakaan libgccjit dari proyek GCC sebagai generator kode di Rustc, yang memungkinkan Rustc memberikan dukungan untuk arsitektur dan pengoptimalan yang tersedia di GCC. Promosi kompiler berarti kemampuan untuk menggunakan generator kode berbasis GCC di Rustc untuk membangun kompiler Rustc itu sendiri. Dari segi praktis, fitur ini memungkinkan Anda membuat program karat untuk arsitektur yang sebelumnya tidak didukung di Rustc.
  • Rilis toolkit uutils coreutils 0.0.13 telah tersedia, di mana analog dari paket GNU Coreutils, yang ditulis ulang dalam bahasa Rust, sedang dikembangkan. Coreutils hadir dengan lebih dari seratus utilitas, termasuk sortir, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln, dan ls. Tujuan dari proyek ini adalah untuk menciptakan implementasi alternatif lintas platform dari Coreutils, yang mampu berjalan pada platform Windows, Redox dan Fuchsia, serta didistribusikan di bawah lisensi MIT yang permisif, bukan lisensi copyleft GPL.

    Versi baru ini telah meningkatkan implementasi banyak utilitas, termasuk peningkatan kompatibilitas utilitas cp, dd, df, split dan tr secara signifikan dengan rekan-rekan mereka dari proyek GNU. Dokumentasi online disediakan. Parser clap digunakan untuk mengurai argumen baris perintah, yang telah meningkatkan output untuk flag “--help” dan menambahkan dukungan untuk singkatan perintah yang panjang (misalnya, Anda dapat menentukan “ls -col” alih-alih “ls -color ”).

Sumber: opennet.ru

Tambah komentar