Rust 1.78 гарсан. Go болон Rust хоёрын давуу талыг хослуулсан борго хэл

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

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

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

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

  • Хөрвүүлэгчийн гаргасан алдааны мэдээнд нөлөөлөх хэрэгсэл болох "#[оношлогооны]" шинэ атрибутын нэрийн орон зайг санал болгосон. Шинэ орон зайд эхнийх нь "#[diagnostic::on_unimlemented]" шинж чанар бөгөөд энэ нь тухайн төрөлд хэрэгжээгүй шинж чанарыг ашиглах шаардлагатай нөхцөл байдалд хаягдсан алдааны мэдэгдлүүдийг өөрчлөхөд ашиглаж болно. #[diagnostic::on_unimlemented(message = "My Message for `ImportantTrait<{A}>` for `{Self}`-д хэрэгжээгүй байна", label = "My Label", note = "Note 1", note = "Note" 2" )] шинж чанар Чухал зан чанар {} fn use_my_trait(_: impl ImportantTrait) ) {} fn main() { use_my_trait(String::new()); } алдаа[E32]: `ImportantTrait-д зориулсан миний мессеж ` `String`-д хэрэгжээгүй —> src/main.rs:0277:32 | 12 | ашиглах_миний_шинж чанар(String::new()); | ———— ^^^^^^^^^^^^ Миний шошго | | | Энэ дуудлагын дагуу оруулсан хязгаарт шаардлагатай | = тусламж: шинж чанар `ЧухалТrait ` `String`-д хэрэгжээгүй = тэмдэглэл: Тайлбар 18 = тэмдэглэл: Тайлбар 12
  • Аюултай функцүүдэд ашигласан урьдчилсан баталгаажуулалтын шалгалтыг одоо код үүсгэх хүртэл хойшлуулах боломжтой бөгөөд эдгээр шалгалтыг "#[cfg(debug_assertions)]" горимд стандарт номын сан үүсгэх шаардлагагүйгээр хийх боломжтой боллоо. Шалгалтыг эхлүүлэхийн тулд кодын туршилт эсвэл дибаг хийхэд зориулсан дибаг хийх баталгааг идэвхжүүлэхэд хангалттай.
  • Заагч болон зүсмэлүүдийг зэрэгцүүлэхэд нөлөөлдөг стандарт номын сан дахь функцүүдийн үйлдлийг одоо ажиллах үед урьдчилан таамаглах боломжтой бөгөөд оролтын өгөгдлөөс хамаарна. Заагчийг зэрэгцүүлэхийн тулд офсетийг тооцдог функц заагч::align_offset нь одоо зөвхөн үйлдэл амжилтгүй болсон тохиолдолд usize::MAX-г буцаана. Зүсмэлүүдийг зэрэгцүүлсэн дунд зүсмэл болон анхны эхлэл ба төгсгөлийн зүсмэлүүдтэй дүрслэл болгон хувиргадаг slice::align_to болон slice::align_to_mut функцууд нь одоо үргэлж хамгийн том дунд хэсгийг буцаадаг.
  • Дараахь хүмүүсийг тогтвортой ангилалд шилжүүлэв.
    • impl &Stdin-д зориулж уншина уу
    • Зарим std::error::Алдаатай холбоотой хэрэгжүүлэлтийн хувьд статик бус (статик бус) насан туршдаа ашиглахыг зөвшөөрнө үү.
    • Оруулсан хэрэгжилт Хэмжээний утгыг зөвшөөрнө.
    • impl From io::Алдаа
  • Barrier::new() функцийг тогтмолуудын оронд ямар ч контекст "const" атрибуттай ашиглахаар тогтворжуулсан.
  • Зорилтот платформуудын хувьд x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm болон i686vgp- Одоо хамгийн багадаа Windows 10 хувилбар шаардлагатай.
  • Гурав дахь түвшний дэмжлэгийг wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf болон loongarch64-unknown-linux-musl платформуудад хэрэгжүүлсэн. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээлийг нийтлэх, кодыг бүтээх боломжтой эсэхийг шалгахгүйгээр.
  • Add wasm32-wasip1 зорилтот платформыг дэмжих хоёр дахь түвшнийг хэрэгжүүлэв. Хоёрдахь түвшний дэмжлэг нь угсралтын баталгааг агуулдаг.
  • wasm32-wasi-preview1-threads платформыг wasm32-wasip1-threads болгон өөрчилсөн.
  • Хөрвүүлэгчийг LLVM 18 ашиглахаар сольсон. LLVM 18-ийг x86-32 болон x86-64 архитектурт ашиглах үед u128 болон i128 төрлүүдтэй холбоотой ABI-г өөрчилсөн.
  • Ачааны гэрээний менежерт түгжих файлуудын 4-р хувилбар (lockfile v4) тогтворжсон.
  • Ачаа нь сүүлийн үеийн дата ашиглалтын талаарх мэдээлэл бүхий тогтворжсон дэлхийн кэштэй. Кэш нь SQLite ашиглан $CARGO_HOME/.global-cache-д байршдаг бөгөөд индекс, крат файл, кодын лавлах, git clone, git checkout зэрэгт хийгдсэн хамгийн сүүлийн өөрчлөлтүүдийг тусган автоматаар шинэчлэгддэг.

Нэмж дурдахад Borgo програмчлалын хэл нь Go хэлнээс илүү илэрхийлэлтэй байхыг хичээдэг ч Rust хэлнээс бага төвөгтэй байдаг. Борго нь Go болон Rust-ийн шилдэг шинж чанаруудыг нэгтгэж, хэл бүрийн дутагдлыг нөхдөг. Жишээлбэл, Go нь энгийн бөгөөд ойлгомжтой боловч дэвшилтэт төрлийн аюулгүй байдлын функцийг хангадаггүй. Rust хэл нь аюулгүй програмчлалын хэрэгслээр хангадаг боловч хэтэрхий төвөгтэй байдаг. Төслийг The Simple Haskell гарын авлагын зохиогч, Quad CI тасралтгүй интеграцийн системийг хөгжүүлэгч Марко Сампеллегрини боловсруулж байна.

Rust 1.78 гарсан. Go болон Rust хоёрын давуу талыг хослуулсан борго хэл

Borgo нь статик бичих, Go-like төрөл, Rust-like syntax-ийг ашигладаг. Борго кодын мөрийн төгсгөлд цэгтэй таслал заавал байх ёстой. Борго кодыг одоо байгаа Go багцуудтай бүрэн нийцэх Go дүрслэл болгон эмхэтгэсэн. Хөрвүүлэгчийн код нь Rust дээр бичигдсэн бөгөөд ISC лицензийн дагуу түгээгддэг. fmt enum NetworkState ашиглана уу { Loading, Failed(int), Success(T), } struct Response { гарчиг: мөр, үргэлжлэх хугацаа: int, } fn main() { let res = Response { гарчиг: “Сайн уу ертөнц”, үргэлжлэх хугацаа: 0, } let state = NetworkState.Success(res) let msg = тохирох төлөв { NetworkState.Loading => “ачааж байна”, NetworkState.Failed(код) => fmt.Sprintf(“Алдааны код: %d”, код), NetworkState.Success (res) => res.title, } fmt.Println(msg)}

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

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