Rilis Bahasa Pemrograman Rust 1.47

Rilis 1.47 bahasa pemrograman sistem Rust, yang didirikan oleh proyek Mozilla, telah diterbitkan. Bahasa ini berfokus pada keamanan memori, menyediakan manajemen memori otomatis, dan menyediakan sarana untuk mencapai paralelisme tugas yang tinggi tanpa menggunakan pengumpul sampah atau waktu proses (waktu proses dikurangi menjadi inisialisasi dasar dan pemeliharaan perpustakaan standar).

Manajemen memori otomatis Rust menghilangkan kesalahan saat memanipulasi pointer dan melindungi terhadap masalah yang timbul dari manipulasi memori tingkat rendah, seperti mengakses wilayah memori setelah dibebaskan, dereferensi pointer nol, buffer overruns, dll. Untuk mendistribusikan perpustakaan, memastikan perakitan dan mengelola dependensi, proyek ini mengembangkan manajer paket Cargo. Repositori crates.io didukung untuk perpustakaan hosting.

Inovasi utama:

  • Dukungan yang diterapkan untuk sifat-sifat array dengan ukuran sewenang-wenang. Sebelumnya, karena ketidakmampuan untuk mendefinisikan fungsi umum untuk semua nilai bilangan bulat, pustaka standar menyediakan dukungan sifat bawaan hanya untuk array dengan ukuran hingga 32 elemen (ciri untuk setiap ukuran ditentukan secara statis). Berkat penciptaan fungsionalitas const generik, fungsi generik dapat didefinisikan untuk ukuran array apa pun, tetapi fungsi tersebut belum disertakan dalam fitur stabil bahasa, meskipun fungsi tersebut diimplementasikan di kompiler dan sekarang digunakan di perpustakaan standar untuk tipe array dengan ukuran berapa pun.
    Misalnya, konstruksi berikut di Rust 1.47 akan mencetak konten array, meskipun sebelumnya akan menghasilkan kesalahan:

fn utama() {
misalkan xs = [0; 34];
println!("{:?}",xs);
}

  • Memberikan keluaran jejak yang lebih pendek (backtrace), keluaran dalam situasi darurat. Elemen-elemen yang tidak menarik dalam sebagian besar situasi, namun mengacaukan keluaran dan mengalihkan perhatian dari penyebab utama masalah, akan dikeluarkan dari jejak. Untuk mengembalikan jejak penuh, Anda dapat menggunakan variabel lingkungan "RUST_BACKTRACE=full". Misalnya saja untuk kodenya

fn utama() {
panik!();
}

Sebelumnya, penelusuran ditampilkan dalam 23 tahap, namun sekarang akan dikurangi menjadi 3 tahap, sehingga Anda dapat langsung memahami esensinya:

thread 'main' panik pada 'panik eksplisit', src/main.rs:2:5
tumpukan penelusuran balik:
0: std::panik::begin_panic
di /rustc/d…d75a/library/std/src/panicking.rs:497
1: taman bermain::utama
di ./src/main.rs:2
2: inti::ops::fungsi::FnOnce::call_once
di /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Kompiler Rustc telah diperbarui untuk dibangun menggunakan LLVM 11 (Rust menggunakan LLVM sebagai backend untuk pembuatan kode). Pada saat yang sama, kemampuan untuk membangun dengan LLVM lama, hingga versi 8, dipertahankan, tetapi secara default (di Rust-lang/llvm-project) sekarang digunakan LLVM 11. Rilis LLVM 11 diharapkan di masa mendatang hari.
  • Pada platform Windows, kompiler Rustc menyediakan dukungan untuk mengaktifkan pemeriksaan integritas aliran kontrol (Control Flow Guard), yang diaktifkan menggunakan flag β€œ-C control-flow-guard”. Di platform lain, tanda ini diabaikan untuk saat ini.
  • Bagian baru API telah dipindahkan ke kategori stabil, termasuk Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from yang distabilkan , f32::TAU dan f64::TAU.
  • Atribut β€œconst”, yang menentukan kemungkinan menggunakannya dalam konteks apa pun alih-alih konstanta, digunakan dalam metode:
    • baru untuk semua bilangan bulat selain nol;
    • dicentang_add, dicentang_sub, dicentang_mul, dicentang_neg, dicentang_shl, dicentang_shr, saturating_add, saturating_sub dan saturating_mul untuk semua bilangan bulat;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace dan is_ascii_control untuk tipe char dan u8.
  • Untuk FreeBSD, toolkit dari FreeBSD 11.4 digunakan (FreeBSD 10 tidak mendukung LLVM 11).

Diambil dari opennet.ru

Sumber: linux.org.ru

Tambah komentar