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

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

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

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

  • Мөр форматлах блокуудад өмнө нь мөрийн дараа тодорхой жагсаасан хувьсагчдыг тоо, нэрээр нь орлуулах боломжоос гадна мөрөнд “{танигч}” илэрхийллийг нэмж дурын тодорхойлогчдыг орлуулах боломжийг хэрэгжүүлсэн. Жишээ нь: // Өмнө нь дэмжигдсэн бүтээцүүд: println!("Сайн уу, {}!", get_person()); println!("Сайн уу, {0}!", get_person()); println!("Сайн уу, {хүн}!", хүн = авах_хүн()); // одоо та let person = get_person(); println!("Сайн уу, {хүн}!");

    Тодорхойлогчдыг форматын сонголтууд дээр шууд зааж өгч болно. let (өргөн, нарийвчлал) = get_format(); get_scores() доторх (нэр, оноо) { println!("{нэр}: {оноо:width$.precision$}"); }

    Шинэ орлуулалт нь "сандрах!" макрог эс тооцвол мөрийн форматын тодорхойлолтыг дэмждэг бүх макро дээр ажилладаг. Rust хэлний 2015 болон 2018 оны хувилбаруудад panic!("{ident}")-г ердийн мөр гэж үздэг (Rust 2021-д орлуулалт ажилладаг).

  • Windows платформ дээрх std::process::Командын бүтэц нь аюулгүй байдлын үүднээс тушаалуудыг гүйцэтгэх үед одоогийн директор доторх гүйцэтгэгдэх боломжтой файлуудыг хайхаа больсон. Итгэмжгүй лавлах (CVE-2021-3013) дээр программуудыг ажиллуулж байгаа тохиолдолд хортой кодыг ажиллуулахад ашиглаж болох тул одоогийн лавлахыг хассан. Гүйцэтгэх боломжтой илрүүлэх шинэ логик нь Rust лавлахууд, програмын лавлахууд, Windows системийн лавлахууд болон PATH орчны хувьсагчд заасан лавлахуудаас хайлт хийх болно.
  • Стандарт номын сан нь "#[заавал_ашиглах]" гэж тэмдэглэгдсэн функцүүдийн тоог нэмэгдүүлж, буцаах утгыг үл тоомсорлож байгаа тохиолдолд анхааруулга өгсөн бөгөөд энэ нь функцийг шинэ утгыг буцаахаас илүү утгыг өөрчилнө гэж үзвэл алдааг тодорхойлоход тусалдаг.
  • API-ийн шинэ хэсгийг тогтвортой гэсэн ангилалд шилжүүлж, шинж чанаруудын арга, хэрэгжилтийг тогтворжуулсан:
    • Мета өгөгдөл:: тэмдэгтийн холбоос
    • Зам:: тэмдэгтийн холбоос
    • {бүхэл тоо}:: ханасан_див
    • Сонголт::шалгагдаагүй
    • Үр дүн :: боодлыг_болов
    • Үр дүн :: unwrap_err_checked
  • Үүнийг тогтмолуудын оронд ямар ч нөхцөлд ашиглах боломжийг тодорхойлдог "const" шинж чанарыг дараах функцүүдэд ашигладаг.
    • Үргэлжлэх хугацаа::шинэ
    • Үргэлжлэх хугацаа::шалгасан_нэмэх
    • Үргэлжлэх хугацаа:: ханасан_нэмэх
    • Үргэлжлэх хугацаа::шалгасан_дэд
    • Үргэлжлэх хугацаа:: ханасан_дэд
    • Үргэлжлэх хугацаа::checked_mul
    • Үргэлжлэх хугацаа:: ханасан_муль
    • Үргэлжлэх хугацаа :: шалгагдсан_див
  • "const" контекст дэх "*const T" заагчийг ялгахыг зөвшөөрөх.
  • Ачааны багцын менежерт rust_version талбарыг багцын мета өгөгдөлд нэмсэн бөгөөд "--message-format" сонголтыг "cargo install" команд дээр нэмсэн.
  • Хөрвүүлэгч нь CFI (Control Flow Integrity) хамгаалах механизмд дэмжлэг үзүүлдэг бөгөөд энэ нь шууд бус дуудлага бүрийн өмнө шалгалтыг нэмдэг бөгөөд энэ нь тодорхой бус үйлдлийн зарим хэлбэрийг илрүүлэх бөгөөд энэ нь ердийн гүйцэтгэлийн дарааллыг (хяналтын урсгал) зөрчихөд хүргэж болзошгүй юм. функцууд дээр санах ойд хадгалагдсан заагчийг өөрчилдөг эксплойтуудыг ашиглах.
  • Хөрвүүлэгч нь туршилтын явцад кодын хамрах хүрээг үнэлэхэд ашигладаг LLVM хамрах хүрээний харьцуулалтын форматын 5 ба 6-р хувилбаруудад дэмжлэг нэмсэн.
  • Хөрвүүлэгчид LLVM-ийн хамгийн бага хувилбарт тавигдах шаардлагыг LLVM 12 болгож нэмэгдүүлсэн.
  • x86_64-үл мэдэгдэх-none платформын гурав дахь түвшний дэмжлэгийг хэрэгжүүлсэн. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээлийг нийтлэх, кодыг бүтээх боломжтой эсэхийг шалгахгүйгээр.

Нэмж дурдахад, Windows үйлдлийн системд зориулсан програмуудыг боловсруулахад Rust хэлийг ашиглах боломжийг олгодог Windows 0.30 номын санд зориулсан Rust-ийн хувилбарыг Майкрософт гаргасан тухай бид тэмдэглэж болно. Энэхүү багцад хоёр хайрцагны багц (windows болон windows-sys) багтсан бөгөөд үүгээр дамжуулан Rust программ дахь Win API-д хандах боломжтой. API дэмжлэгийн код нь API-г тайлбарласан мета өгөгдлөөс динамикаар үүсгэгддэг бөгөөд энэ нь танд одоо байгаа Win API дуудлагад төдийгүй ирээдүйд гарч ирэх дуудлагад дэмжлэг үзүүлэх боломжийг олгодог. Шинэ хувилбар нь UWP (Universal Windows Platform) зорилтот платформын дэмжлэгийг нэмж, Handle болон Debug төрлүүдийг хэрэгжүүлдэг.

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

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