Rust 1.60 Програмчлалын хэлний хувилбар

Mozilla төслөөс үүсгэн байгуулсан, гэхдээ одоо Rust Foundation бие даасан ашгийн бус байгууллагын ивээл дор бүтээгдсэн Rust 1.60 ерөнхий зориулалтын програмчлалын хэлний хувилбар хэвлэгдэн гарлаа. Энэ хэл нь санах ойн аюулгүй байдалд анхаарлаа хандуулж, хог цуглуулагч болон ажиллах хугацааг ашиглахаас зайлсхийхийн зэрэгцээ ажлын өндөр зэрэглэлд хүрэх арга хэрэгслийг өгдөг (ажиллах хугацаа нь стандарт номын сангийн үндсэн эхлүүлэх, засвар үйлчилгээ хүртэл багассан).

Rust-ийн санах ойтой харьцах аргууд нь хөгжүүлэгчийг заагчийг удирдах үед гарч болох алдаанаас аварч, санах ойг сулласны дараа санах ойн талбарт хандах, тэг заагчийг ялгах, буфер хэт ачаалах гэх мэт санах ойн доод түвшний боловсруулалтаас үүдэлтэй асуудлаас хамгаалдаг. Номын санг түгээх, бүтээн байгуулалтыг хангах, хамаарлыг удирдахын тулд төсөл нь Ачааны багц менежерийг боловсруулдаг. Crates.io репозиторыг номын санг байршуулахад дэмждэг.

Санах ойн аюулгүй байдлыг Rust-д хөрвүүлэх үед лавлагаа шалгах, объектын өмчлөлийг хянах, объектын ашиглалтын хугацааг (хамрах хүрээ) бүртгэх, кодыг гүйцэтгэх явцад санах ойд нэвтрэх зөв эсэхийг үнэлэх замаар хангадаг. Rust нь бүхэл тоон хэтрэхээс хамгаалж, ашиглахын өмнө хувьсагчийн утгыг заавал эхлүүлэхийг шаарддаг, стандарт номын сан дахь алдааг илүү сайн зохицуулдаг, өөрчлөгдөшгүй лавлагаа ба хувьсагчийн ойлголтыг анхдагчаар ашигладаг, логик алдааг багасгахын тулд хүчтэй статик бичвэрийг санал болгодог.

Гол инноваци:

  • Rustc хөрвүүлэгч нь туршилтын явцад кодын хамрах хүрээг үнэлэхэд ашигладаг хамрах хүрээний өгөгдлийг үүсгэх тогтворжуулсан LLVM-д суурилсан системтэй. Угсралтын явцад хамрах хүрээний өгөгдлийг идэвхжүүлэхийн тулд та "-Cinstrument-coverage" гэсэн тугийг ашиглах ёстой, жишээ нь "RUSTFLAGS=-C instrument-coverage" cargo build" командыг ашиглан угсралтыг эхлүүлэх хэрэгтэй. Ийм байдлаар эмхэтгэсэн гүйцэтгэх файлыг ажиллуулсны дараа default.profraw файл нь одоогийн директорт хадгалагдах бөгөөд үүнийг боловсруулахын тулд та llvm-tools-preview бүрэлдэхүүн хэсгийн llvm-profdata хэрэгслийг ашиглаж болно. Дараа нь llvm-profdata-аар боловсруулсан гаралтыг llvm-cov руу дамжуулж тайлбартай кодын хамрах тайланг гаргаж болно. Эх кодын холбоосын талаарх мэдээллийг шалгаж буй гүйцэтгэх файлаас авсан бөгөөд үүнд хамрах хүрээний тоолуур болон код хоорондын холболтын талаархи шаардлагатай мэдээллийг багтаасан болно. 1| 1|fn main() { 2| 1| println!("Сайн уу, дэлхий!"); 3| 1|}
  • Ачааны багц менежерт барилгын ажлын явц, үе шат бүрийн гүйцэтгэлийн цаг хугацааны талаархи нарийвчилсан тайланг агуулсан "-timings" тугийг дэмжих ажлыг тогтворжуулсан. Уг тайлан нь угсрах үйл явцын гүйцэтгэлийг оновчтой болгоход тустай байж болох юм.
  • Ачааны багц менежер нь нөхцөлт эмхэтгэх, нэмэлт хамаарлыг сонгох механизмын шинэ синтаксийг санал болгож, Cargo.toml файлд [боломж] хэсэгт нэрлэгдсэн шинж чанаруудын жагсаалтыг жагсаан тохируулж, багц бүтээх явцад шинж чанаруудыг идэвхжүүлснээр идэвхжүүлдэг. "--features" тугийг ашиглан. Шинэ хувилбар нь тусдаа нэрийн орон зайд хамаарал болон сул хамаарлыг дэмждэг.

    Эхний тохиолдолд "[боломжууд]" хэсгийн доторх "dep:" угтвар бүхий элементүүдийг ашиглаж, энэ хамаарлыг шинж чанар болгон далд хэлбэрээр илэрхийлэхгүйгээр нэмэлт хамааралтай шууд холбох боломжтой. Хоёр дахь тохиолдолд "?" тэмдгээр тэмдэглэх дэмжлэг нэмэгдсэн. ("багцын нэр?/боломжийн нэр") нэмэлт хамаарлууд бөгөөд зөвхөн бусад шинж чанарт өгөгдсөн нэмэлт хамаарлыг багтаасан тохиолдолд л оруулах ёстой. Жишээлбэл, доорх жишээн дээр serde шинж чанарыг идэвхжүүлснээр "serde" хамаарлыг идэвхжүүлэхээс гадна "rgb" хамаарлын "serde" шинж чанарыг идэвхжүүлэх боловч "rgb" хамаарлыг өөр газар идэвхжүүлсэн тохиолдолд л: [dependencies] serde = { хувилбар = " 1.0.133", нэмэлт = үнэн } rgb = { хувилбар = "0.8.25", нэмэлт = үнэн } [онцлогууд] serde = ["dep:serde", "rgb?/serde"]

  • Сүүлийн хувилбарт идэвхгүй болсон нэмэгдэл эмхэтгэлийн дэмжлэгийг буцаасан. Энэ функцийг идэвхгүй болгоход хүргэсэн хөрвүүлэгчийн алдаа шийдэгдсэн.
  • Шуурхай таймеруудыг унтдаг горимд системд зарцуулсан цагийг тооцдог монотон цагийн баталгаагаар хангах зарим асуудлыг шийдсэн. Өмнө нь таймерыг ажиллуулахын тулд аль болох OS API ашигладаг байсан бөгөөд энэ нь техник хангамжийн асуудал, виртуалчлалын хэрэглээ, үйлдлийн систем дэх алдаа зэрэг цаг хугацааны нэгэн хэвийн байдлыг эвддэг асуудалтай нөхцөл байдлыг харгалзан үздэггүй.
  • API-ийн шинэ хэсгийг тогтвортой гэсэн ангилалд шилжүүлж, шинж чанаруудын арга, хэрэгжилтийг тогтворжуулсан:
    • Arc::new_cycle
    • Rc::new_cycle
    • зүсмэл::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::сэлбэг_хүчин чадал
    • МагадгүйUninit::sume_init_drop
    • МагадгүйUninit::sume_init_read
    • i8 :: abs_diff
    • i16 :: abs_diff
    • i32 :: abs_diff
    • i64 :: abs_diff
    • i128 :: abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • ::abs_diff ашиглах
    • io::ErrorKind-д зориулсан дэлгэц
    • ExitCode-ээс
    • төлөө биш! ("хэзээ ч" гэж бичнэ үү)
    • _Op_Assign<$t>
    • arch::is_aarch64_боломжийг илрүүлсэн!
  • Гурав дахь түвшний дэмжлэгийг mips64-openwrt-linux-musl* болон armv7-unknown-linux-uclibceabi (softfloat) платформуудад хэрэгжүүлсэн. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээн байгуулалтыг нийтлэх, код бүтээх чадварыг шалгахгүйгээр.
  • Хөрвүүлэгчийг LLVM 14 ашиглахаар сольсон.

Нэмж дурдахад та дараахь зүйлийг тэмдэглэж болно.

  • Rustc хөрвүүлэгчийг rustc_codegen_gcc backend ашиглан ачаалах дэмжлэгийг нэмсэн бөгөөд энэ нь танд GCC төслийн libgccjit номын санг rustc-д код үүсгэгч болгон ашиглах боломжийг олгодог бөгөөд энэ нь rustc-д GCC-д байдаг архитектур, оновчлолыг дэмжих боломжийг олгодог. Хөрвүүлэгчийн сурталчилгаа гэдэг нь rustc хөрвүүлэгчийг өөрөө бүтээхийн тулд rustc-д GCC-д суурилсан код үүсгэгчийг ашиглах чадварыг хэлнэ. Практик талаас нь авч үзвэл, энэ функц нь өмнө нь rustc-д дэмжигдээгүй архитектурт зориулсан зэвний програмуудыг бүтээх боломжийг олгодог.
  • uutils coreutils 0.0.13 хэрэгслийн иж бүрдлийг гаргах боломжтой бөгөөд үүний хүрээнд Rust хэл дээр дахин бичсэн GNU Coreutils багцын аналогийг боловсруулж байна. Coreutils нь sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln, ls зэрэг зуу гаруй хэрэгслүүдтэй ирдэг. Төслийн зорилго нь GPL copyleft лицензийн оронд Windows, Redox, Fuchsia платформ дээр ажиллах чадвартай Coreutils-ийн кросс платформ хувилбарыг бий болгох, мөн MIT лицензийн дагуу түгээх явдал юм.

    Шинэ хувилбар нь cp, dd, df, split болон tr хэрэгслүүдийн GNU төслийн хамтрагчидтай нийцтэй байдал зэрэг олон хэрэгслүүдийн хэрэгжилтийг сайжруулсан. Онлайн баримт бичгийг өгсөн. Clap задлагчийг командын мөрийн аргументуудыг задлан шинжлэхэд ашигладаг бөгөөд энэ нь "--help" тугны гаралтыг сайжруулж, урт командуудын товчлолыг дэмждэг (жишээлбэл, "ls -color"-ын оронд "ls -col" гэж зааж өгч болно. ”).

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх