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

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

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

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

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

  • Нийтлэг холбоотой төрлүүдэд (GAT, Generic Associated Types) дэмжлэг нэмсэн нь өөр төрөлтэй холбоотой төрлийн нэр үүсгэх, төрөл үүсгэгчийг шинж чанаруудтай холбох боломжийг олгодог. шинж чанар Foo { төрөл Bar; }
  • "let ... else" илэрхийлэл хэрэгжсэн бөгөөд энэ нь "let" илэрхийлэл доторх загвар тохирох нөхцөлийг шууд шалгах, хэрэв загвар тохирохгүй бол дурын кодыг гүйцэтгэх боломжийг олгоно. let Ok(count) = u64::from_str(count_str) else { сандран!("Бүхэл тоог задлан шинжилж чадахгүй байна: '{count_str}'"); };
  • Блокийн нэрийг (шошго) ашиглан дуусгавар болгох блокыг тодорхойлохын тулд нэрлэсэн блокуудаас хугацаанаас нь өмнө гарахын тулд break мэдэгдлийг ашиглахыг зөвшөөрнө үү. үр дүн = ‘блок: { do_thing(); if condition_not_met() { break ‘block 1; } дараагийн_ зүйлийг хийх(); if condition_not_met() { break ‘block 2; } хийх_сүүлийн_юм(); 3 };
  • Линуксийн хувьд өмнө нь зөвхөн macOS платформд ашиглах боломжтой дибаг хийх мэдээллийг тусад нь хадгалах боломжийг (split-debuginfo) нэмсэн. "-Csplit-debuginfo=unpacked" сонголтыг зааж өгөх үед DWARF формат дахь дибагinfo мэдээлэл нь ".dwo" өргөтгөлтэй хэд хэдэн тусдаа объект файлд хадгалагдах болно. "-Csplit-debuginfo=packed" гэж зааж өгснөөр төслийн бүх debuginfo өгөгдлийг багтаасан ".dwp" форматаар нэг багц үүсгэнэ. Debuginfo-г ELF объектын .debug_* хэсэгт шууд нэгтгэхийн тулд та "-Csplit-debuginfo=off" сонголтыг ашиглаж болно.
  • API-ийн шинэ хэсгийг тогтвортой гэсэн ангилалд шилжүүлж, шинж чанаруудын арга, хэрэгжилтийг тогтворжуулсан:
    • std::backtrace::Backtrace
    • Bound::as_ref
    • std::io::мөрт рүү унших
    • ::cast_mut
    • ::cast_const
  • Тогтмол биш харин дурын контекст ашиглах боломжийг тодорхойлдог “const” шинж чанарыг ::offset_from болон ::offset_from функцүүдэд ашигладаг.
  • LSP (Language Server Protocol) протоколын хэрэгжилтийг зэв анализатор руу шилжүүлэх эцсийн шатын хүрээнд Rust Language Server (RLS)-ийн хуучирсан хэрэгжилтийг stub серверээр сольсон бөгөөд үүнд шилжихийг санал болгов. зэв анализатор ашиглан.
  • Эмхэтгэлийн явцад MIR завсрын кодын шугаманд байршуулах дэмжлэг идэвхжсэн бөгөөд энэ нь ердийн хайрцагны багцын эмхэтгэлийг 3-10% хурдасгадаг.
  • Төлөвлөсөн бүтээн байгуулалтыг хурдасгахын тулд ачааны багц менежер дараалалд хүлээгдэж буй ажлуудыг эрэмбэлж өгдөг.

Нэмж дурдахад та автомашины мэдээллийн системийн бүрэлдэхүүн хэсгүүдийг хөгжүүлэхэд Вольво дахь Rust хэлийг ашигласан тухай ярилцлагыг тэмдэглэж болно. Rust-д одоо байгаа болон туршсан кодыг дахин бичихээр төлөвлөөгүй байгаа ч шинэ кодын хувьд Rust нь илүү хямд зардлаар чанарыг сайжруулах сонголтуудын нэг юм. AUTOSAR (Automotive Open System Architecture) болон SAE (Автомашины инженерүүдийн нийгэмлэг) зэрэг автомашины холбоодод Rust хэлийг ашиглахтай холбоотой ажлын хэсгүүдийг байгуулсан.

Нэмж дурдахад Google-ийн инженерийн дэд ерөнхийлөгч Дэвид Клейдермахер Android платформд шифрлэлтийн түлхүүрүүдийг Rust руу удирдахад ашигладаг кодыг орчуулах, мөн стек дэх HTTPS протоколоор DNS-ийг хэрэгжүүлэхэд Rust-ийг ашиглах талаар ярьсан. UWB-чипүүдэд (Хэт өргөн зурвасын) болон Tensor G2 чиптэй холбоотой виртуалчлалын хүрээнд (Android Virtualization Framework). Rust-д дахин бичсэн Bluetooth болон Wi-Fi-д зориулсан шинэ стекүүдийг Android-д зориулж боловсруулж байна. Ерөнхий стратеги нь эхлээд хамгийн эмзэг, амин чухал програм хангамжийн бүрэлдэхүүн хэсгүүдийг Rust болгон хувиргаж, дараа нь бусад холбогдох дэд системүүд рүү тэлэх замаар аюулгүй байдлыг аажмаар бэхжүүлэх явдал юм. Өнгөрсөн жил Rust хэл нь Android платформыг хөгжүүлэхийг зөвшөөрсөн хэлний жагсаалтад багтсан.

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

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