Keluaran bahasa pengaturcaraan Rust 1.44

diterbitkan keluaran bahasa pengaturcaraan sistem Karat 1.44, diasaskan oleh projek Mozilla. Bahasa ini memberi tumpuan kepada keselamatan ingatan, menyediakan pengurusan memori automatik dan menyediakan alatan untuk mencapai keselarian tugas yang tinggi tanpa menggunakan pengumpul sampah dan runtime.

Pengurusan memori automatik Rust menghapuskan ralat semasa memanipulasi penunjuk dan melindungi daripada masalah yang timbul daripada manipulasi memori peringkat rendah, seperti mengakses kawasan memori selepas ia dibebaskan, penolakan penunjuk nol, overrun penimbal, dsb. Pengurus pakej sedang dibangunkan untuk mengedarkan perpustakaan, memastikan pemasangan dan mengurus kebergantungan oleh projek. Cargo, yang membolehkan anda mendapatkan perpustakaan yang anda perlukan untuk program dalam satu klik. Repositori disokong untuk mengehos perpustakaan crates.io.

Dalam teks pengumuman keluaran baharu itu, pemaju Rust terlibat dalam politik dan secara terang-terangan menolak untuk menerbitkan ulasan penuh tentang perubahan dalam Rust 1.44 sebagai tanda solidariti dengan penunjuk perasaan menentang keganasan polis, menunjukkan bahawa isu ini lebih penting. daripada pertukaran pengetahuan teknikal. asas inovasi:

  • Pengurus pakej kargo menyepadukan arahan "pokok kargo", yang memaparkan graf pergantungan seperti pokok. Juga ditambah ialah pilihan "—pendua" ("pokok kargo -d"), yang membolehkan anda menilai kebergantungan dalam versi berbeza bagi pakej yang sama.

    mdbook v0.3.2 (/Pengguna/src/rust/mdbook)
    ├── ammonia 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
    │ │ │ ├── penyedut v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [build-dependencies] │ │ │ └── version_check v0.1.5
    ...

  • Untuk aplikasi yang tidak terikat kepada std ("#![no_std]"), sokongan untuk teknik pengaturcaraan tak segerak dilaksanakan berdasarkan fungsi "async", blok async move { ... } dan operator ".await", yang mudahkan menulis aliran arahan utama pengendali tanpa sekatan.
  • Sokongan untuk skim definisi hierarki modul yang boleh diperluaskan telah ditambahkan pada penghurai. Sebagai contoh, konstruk berikut tidak akan menghasilkan ralat, walaupun ketiadaan sebenar modul "foo/bar/baz.rs" (konstruk masih tidak sah dari segi semantik dan mungkin menyebabkan ralat, tetapi perubahan itu boleh dilihat dan dihuraikan di tahap kompilasi makro dan bersyarat):

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

  • Pengkompil rustc telah menambah keupayaan untuk menggunakan bendera "-C codegen-units" dalam mod tambahan. Pelaksanaan catch_unwind telah diolah semula supaya ia tidak mempunyai kesan prestasi jika proses unwinding dinyahdayakan dan tiada pengecualian dibuang.
  • Sokongan Tahap 64 telah disediakan untuk platform aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos dan x64_XNUMX-apple-tvos. Tahap ketiga melibatkan sokongan asas, tetapi tanpa ujian automatik dan penerbitan binaan rasmi.
  • Bahagian baharu API telah dipindahkan ke kategori stabil, termasuk distabilkan
    PathBuf::with_capacity,
    PathBuf::kapasiti,
    PathBuf::jelas,
    PathBuf::reserve,
    PathBuf::reserve_exact,
    PathBuf::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    Susun atur::align_to,
    Susun atur::pad_to_align,
    Susun atur:: tatasusunan dan
    Susun atur::panjangkan.

  • Fungsi lanjutan perpustakaan standard:
    • Menambahkan varian "vec![]" khas yang dicerminkan secara langsung dalam Vec::new(), membenarkan "vec![]" digunakan dalam konteks dan bukannya pemalar.
    • Pelaksanaan (impl) sifat telah ditambahkan untuk menukar::Infallible Hash.
    • OsString melaksanakan petunjuk pintar DerefMut и IndexMut, mengembalikan "&mut OsStr".
    • Menambah sokongan untuk Unicode 13.
    • Dilaksanakan dalam String Daripada<&mut str>.
    • IoSlice melaksanakan sifat tersebut Salinan.
    • Vec dilaksanakan Daripada<[T; N]>.
    • proc_macro::LexError melaksanakan fmt::Display dan Ralat.
  • Atribut "const", yang menentukan sama ada ia boleh digunakan dalam mana-mana konteks dan bukannya pemalar, digunakan dalam kaedah from_le_bait, to_le_bait, from_be_bait, to_be_bait, from_ne_bait dan to_ne_bait untuk semua jenis integer.
  • Menambah sokongan untuk menjana perpustakaan statik dalam format ".a" dan bukannya ".lib" untuk platform GNU pada Windows.
  • Keperluan minimum untuk LLVM telah dinaikkan kepada LLVM versi 8.

Sumber: opennet.ru

Tambah komen