Rilis Bahasa Pemrograman Rust 1.47

diterbitkan rilis 1.47 dari bahasa pemrograman sistem Karat, 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 pemulung ΠΈ runtime (runtime bermuara pada 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. Manajer paket sedang dikembangkan untuk mendistribusikan perpustakaan, memastikan perakitan dan mengelola ketergantungan oleh proyek. Muatan. Repositori didukung untuk menghosting perpustakaan peti.io.

Utama inovasi:

  • Dukungan yang diterapkan untuk tipe array ukuran apapun. 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 generik konstan (β€œconst generics”), fungsi generik dapat didefinisikan untuk ukuran array apa pun, tetapi fungsi tersebut belum disertakan dalam fitur bahasa stabil, meskipun fungsi tersebut diimplementasikan dalam kompiler dan merupakan Sekarang terlibat di perpustakaan standar untuk ciri-ciri 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!();
    }

    Tadinya tracing dikeluarkan dalam 23 tahap, namun kini akan dikurangi menjadi
    3 langkah yang memungkinkan Anda segera 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 (Karat menggunakan LLVM sebagai backend untuk pembuatan kode). Pada saat yang sama, kemampuan untuk membangun dengan LLVM yang lebih lama, hingga versi 8, tetap dipertahankan, tetapi secara default (dalam karat-lang/llvm-project) sekarang menggunakan LLVM 11. LLVM 11 diperkirakan akan dirilis dalam beberapa hari mendatang.
  • 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.
  • Sebagian API baru telah dipindahkan ke kategori stabil, termasuk stabil
    Identitas::new_raw,
    Rentang::is_kosong,
    RentangInklusif::is_empty,
    Hasil::as_deref,
    Hasil::as_deref_mut,
    Vec::bocor,
    penunjuk::offset_from,
    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 terlibat toolkit dari FreeBSD 11.4 (FreeBSD 10 tidak mendukung LLVM 11).

Sumber: opennet.ru

Tambah komentar