Угсралтын оруулгатай Rust 1.59 програмчлалын хэлийг гаргасан

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

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

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

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

  • Гүйцэтгэлийг бага түвшинд хянах эсвэл тусгай машины зааврыг ашиглах боломжтой програмуудад эрэлт хэрэгцээтэй байгаа ассемблер хэлний оруулгыг ашиглах боломжтой. "asm!" макро ашиглан угсралтын оруулга нэмдэг. болон "global_asm!" Rust дахь стринг солиход ашигладагтай төстэй регистрүүдийг нэрлэхэд стринг форматлах синтаксийг ашиглах. Хөрвүүлэгч нь x86, x86-64, ARM, AArch64 болон RISC-V архитектуруудын угсралтын зааврыг дэмждэг. Оруулах жишээ: std::arch::asm ашиглах; // Х-г 6-аар үржүүлж, letmut x-ийг нэмнэ: u64 = 4; аюултай { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "{x} нэмэх, {tmp}", x = inout(reg) ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • Илэрхийллийн зүүн талд хэд хэдэн шинж чанар, зүсмэлүүд эсвэл бүтцийг зааж өгсөн, бүтцээ алдсан (зэрэгцээ) даалгаврын дэмжлэгийг нэмсэн. Жишээ нь: let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Const generics-ийн анхдагч утгыг зааж өгөх боломжтой: struct ArrayStorage {arr: [T; N], } impl ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage {arr: [a, b], } } }
  • Ачааны багц менежер нь хөрвүүлэгчийн алдааны улмаас боловсруулагдсан хамаарал дахь хүчингүй бүтцийг ашиглах талаар анхааруулга өгдөг (жишээлбэл, алдааны улмаас савласан бүтцийн талбаруудыг аюулгүй блокуудад зээлэхийг зөвшөөрсөн). Ийм бүтээцийг Rust-ийн ирээдүйн хувилбарт цаашид дэмжихгүй.
  • Cargo болон rustc нь дибаг хийх өгөгдөл (strip = "debuginfo") болон тэмдэгтүүдээс (strip = "symbols") хасагдсан, бие даасан хэрэгсэл дуудах шаардлагагүйгээр гүйцэтгэх боломжтой файлуудыг үүсгэх чадвартай байдаг. Цэвэрлэгээний тохиргоог Cargo.toml дахь "стрип" параметрээр гүйцэтгэдэг: [profile.release] strip = "debuginfo", "symbols"
  • Өсөн нэмэгдэж буй эмхэтгэлийг анхдагчаар идэвхгүй болгосон. Шалтгаан нь эмхэтгэгчийн алдааг түр зуур засаж залруулах бөгөөд энэ нь эвдрэл, цуваа тайлах алдаа юм. Алдаа засахыг аль хэдийн бэлтгэсэн бөгөөд дараагийн хувилбарт оруулах болно. Өсөн нэмэгдэж буй эмхэтгэлийг буцаахын тулд та RUSTC_FORCE_INCREMENTAL=1 орчны хувьсагчийг ашиглаж болно.
  • API-ийн шинэ хэсгийг тогтвортой гэсэн ангилалд шилжүүлж, шинж чанаруудын арга, хэрэгжилтийг тогтворжуулсан:
    • std::thread::available_parallelism
    • Үр дүн :: хуулсан
    • Үр дүн::клонжуулсан
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops ::ControlFlow ::үргэлжлүүлж байна
    • u8-д зориулсан TryFrom
    • char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
    • iter::zip
    • NonZeroU8::хоёрын_цахилгаан
    • NonZeroU16::хоёрын_цахилгаан
    • NonZeroU32::хоёрын_цахилгаан
    • NonZeroU64::хоёрын_цахилгаан
    • NonZeroU128::хоёрын_цахилгаан
    • ToLowercase бүтцэд зориулсан DoubleEndedIterator
    • ToUppercase бүтцэд зориулсан DoubleEndedIterator
    • TryFrom<&mut [T]> нь [T; N]
    • UnwindSafe for the Once бүтэц
    • RefUnwindSafe нэг удаа
    • aarch8-ийн хөрвүүлэгчид суурилуулсан armv64 неон функцуудыг дэмждэг
  • Үүнийг тогтмолуудын оронд ямар ч нөхцөлд ашиглах боломжийг тодорхойлдог "const" шинж чанарыг дараах функцүүдэд ашигладаг.
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CStr::from_bytes_wth_nul_checked

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

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