Rilis Bahasa Pemrograman Rust 1.44

diterbitkan rilis bahasa pemrograman sistem Karat 1.44, didirikan oleh proyek Mozilla. Bahasa ini berfokus pada keamanan memori, menyediakan manajemen memori otomatis, dan menyediakan alat untuk mencapai paralelisme tugas yang tinggi tanpa menggunakan pengumpul sampah dan runtime.

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, memungkinkan Anda mendapatkan perpustakaan yang diperlukan untuk program dalam satu klik. Repositori didukung untuk menghosting perpustakaan peti.io.

Dalam teks pengumuman rilis baru, pengembang Rust terlibat dalam politik dan dengan tegas menolak untuk mempublikasikan ulasan lengkap tentang perubahan Rust 1.44 sebagai tanda solidaritas dengan pengunjuk rasa terhadap kekerasan polisi, yang menunjukkan bahwa masalah ini lebih penting. daripada pertukaran pengetahuan teknis. Dasar inovasi:

  • Manajer paket Cargo mengintegrasikan perintah “pohon kargo”, yang menampilkan grafik ketergantungan seperti pohon. Juga ditambahkan opsi “—duplikat” (“cargo tree -d”), yang memungkinkan Anda mengevaluasi dependensi dalam versi berbeda dari paket yang sama.

    mdbook v0.3.2 (/Pengguna/src/rust/mdbook)
    ├── amonia v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── log v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── markup5ever v0.9.0
    │ │ ├── log v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [build-dependensi] │ │ │ └── version_check v0.1.5
    ...

  • Untuk aplikasi yang tidak terikat pada std ("#![no_std]"), dukungan untuk teknik pemrograman asinkron diterapkan berdasarkan fungsi "async", blok async move { ... } dan operator ".await", yang menyederhanakan penulisan alur perintah utama penangan non-pemblokiran.
  • Dukungan untuk skema definisi hierarki modul yang dapat diperluas telah ditambahkan ke parser. Misalnya, konstruk berikut tidak akan menghasilkan kesalahan, meskipun sebenarnya tidak ada modul "foo/bar/baz.rs" (konstruk tersebut masih tidak valid secara semantik dan dapat menyebabkan kesalahan, tetapi perubahannya dapat dilihat dan diuraikan di tingkat kompilasi makro dan kondisional):

    #[cfg(FALSE)] mod foo {
    bilah mod {
    mod baz;
    }
    }

  • Kompiler Rustc telah menambahkan kemampuan untuk menggunakan tanda “-C codegen-units” dalam mode tambahan. Penerapan catch_unwind telah dikerjakan ulang sehingga tidak berdampak pada kinerja jika proses pelepasan dinonaktifkan dan tidak ada pengecualian yang diberikan.
  • Dukungan level 64 telah disediakan untuk platform aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos, dan x64_XNUMX-apple-tvos. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis dan publikasi versi resmi.
  • Sebagian API baru telah dipindahkan ke kategori stabil, termasuk stabil
    PathBuf::dengan_kapasitas,
    PathBuf::kapasitas,
    PathBuf:: jelas,
    PathBuf::cadangan,
    PathBuf::reserve_exact,
    PathBuf::shrink_to_fit,
    {f32|f64}::ke_int_tidak dicentang,
    Tata letak::align_to,
    Tata Letak::pad_to_align,
    Tata letak::array dan
    Tata letak::memperluas.

  • Fungsi tambahan dari perpustakaan standar:
    • Menambahkan varian khusus "vec![]" yang secara langsung tercermin dalam Vec::new(), sehingga memungkinkan "vec![]" digunakan dalam konteks, bukan konstanta.
    • Implementasi (impl) dari sifat tersebut telah ditambahkan untuk mengkonversi::Infallible Hash.
    • OsString mengimplementasikan petunjuk cerdas DerefMut и IndeksMut, mengembalikan "&mut OsStr".
    • Menambahkan dukungan untuk Unicode 13.
    • Diimplementasikan dalam String Dari<&mut str>.
    • IoSlice mengimplementasikan sifat tersebut Copy.
    • Vec diimplementasikan Dari<[T; T]>.
    • proc_macro::LexError mengimplementasikan fmt::Display dan Error.
  • Atribut “const”, yang menentukan apakah dapat digunakan dalam konteks apa pun selain konstanta, digunakan dalam metode from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes, dan to_ne_bytes untuk semua tipe integer.
  • Menambahkan dukungan untuk menghasilkan perpustakaan statis dalam format ".a" dan bukan ".lib" untuk platform GNU di Windows.
  • Persyaratan minimum untuk LLVM telah dinaikkan ke LLVM versi 8.

Sumber: opennet.ru

Tambah komentar