Mozilla төслөөс үүсгэн байгуулсан Rust 1.99 програмчлалын хэл нь одоо бие даасан ашгийн бус Rust Foundation-ийн ивээл дор хөгжүүлэгдэж байна. Энэ хэл нь санах ойн аюулгүй байдалд анхаарлаа хандуулж, хог цуглуулагч болон ажиллах цагийг ашиглахгүйгээр хийхдээ даалгаврын гүйцэтгэлийн өндөр зэрэглэлд хүрэх хэрэгслүүдээр хангадаг (ажиллах хугацаа нь стандарт номын сангийн үндсэн эхлүүлэх, засвар үйлчилгээ хүртэл багасдаг).
Rust-ийн санах ойн удирдлагын аргууд нь заагчийг удирдах алдааг арилгах, санах ойг чөлөөлсний дараа хандах, хоосон заагчийг салгах, буферийн хэт ачаалал гэх мэт доод түвшний санах ойн удирдлагаас үүдэлтэй асуудлуудаас хамгаалах зорилготой юм. Төсөл нь номын сангуудыг түгээх, бүтээх ажлыг хөнгөвчлөх, хамаарлыг удирдах зорилгоор Cargo багц менежерийг боловсруулж байна. crates.io репозиторыг номын сангуудыг байршуулах зорилгоор хадгалдаг.
Санах ойн аюулгүй байдлыг Rust-д хөрвүүлэх үед лавлагаа шалгах, объектын өмчлөлийг хянах, объектын ашиглалтын хугацааг (хамрах хүрээ) бүртгэх, кодыг гүйцэтгэх явцад санах ойд нэвтрэх зөв эсэхийг үнэлэх замаар хангадаг. Rust нь бүхэл тоон хэтрэхээс хамгаалж, ашиглахын өмнө хувьсагчийн утгыг заавал эхлүүлэхийг шаарддаг, стандарт номын сан дахь алдааг илүү сайн зохицуулдаг, өөрчлөгдөшгүй лавлагаа ба хувьсагчийн ойлголтыг анхдагчаар ашигладаг, логик алдааг багасгахын тулд хүчтэй статик бичвэрийг санал болгодог.
Гол инноваци:
- Rust нь одоо C төслүүдээс (C ABI) дуудлагад зориулж экспортолсон хувьсах функцуудыг үүсгэх боломжийг олгодог. Ийм функцүүдийн параметрийн жагсаалтын сүүлийн элемент нь "..." бүтэц байж болох бөгөөд үүнийг Rust дээр C дахь va_list-тэй төстэй ажилладаг VaList тусгай төрлийг ашиглан зохицуулдаг. unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg:: () }; b = аюултай { args.next_arg:: () }; a + b } fn foo() -> i32 { аюултай { нийлбэр(0i32, 2i32) } }
- Layout::for_value_raw, mem::size_of_val_raw, болон mem::align_of_val_raw функцуудыг түүхий заагчийг аюулгүй хэмжээгээр тохируулах, зэрэгцүүлэх боломжийг олгохын тулд тогтворжуулсан бөгөөд үүнд зүсмэл гэх мэт динамик хэмжээтэй төрлүүдийг ашиглах үед өгөгдлийн лавлагаа үүсгэх шаардлагагүйгээр багтана.
- Баримт бичигт одоо Box::leak (дугуй аяллын unleaking) руу дуудлага хийх замаар тодорхойгүй хугацаагаар статикаар лавлагаалагдсан (&'static) санах ойг чөлөөлөхөөс зайлсхийхийг зөвлөж байна, учир нь энэ үйлдэл нь ирээдүйн хөрвүүлэгчийн оновчлол болон залгагдаж болох санах ойн хуваарилалтын механизмтай нийцэхгүй байдлаас болж асуудал үүсгэж болзошгүй юм. Түр зуурын эзэмшлийн шилжүүлгийн статик лавлагаа үүсгэхийн оронд түүхий заагчийг ашиглахыг зөвлөж байна, жишээлбэл, Box::into_non_null руу дуудлага хийх замаар.
- API-ийн шинэ хэсгийг тогтвортой гэсэн ангилалд шилжүүлж, шинж чанаруудын арга, хэрэгжилтийг тогтворжуулсан:
- Хайрцагт зориулсан IntoIterator<[T; N]>
- &Box<[T; N]>-д зориулсан IntoIterator
- &mut Box-д зориулсан IntoIterator<[T; N]>
- VecDeque::retain_back
- core::ffi::VaList
- Хайрцаг::into_non_null
- Хайрцаг::from_non_null
- Vec::into_parts
- Vec::from_parts
- core::mem::size_of_val_raw
- core::mem::align_of_val_raw
- core::alloc::Layout::for_value_raw
- Тэмдэгт мөр::from_utf8_lossy_owned
- string::FromUtf8Error::into_utf8_lossy
- StepBy-д зориулсан FusedIterator
- std::fs::тохируулсан_цаг
- std::fs::set_times_nofollow
- Ачааны багцын менежер нь одоо "debug" профайлтай төстэй шинээр суурилуулсан "debug" профайлтай болсон (дибаг болон хөгжүүлэлтийн чадавхийг ирээдүйд салгахаар төлөвлөж байна). CI-д бүтээх үед нэмэгдэл эмхэтгэлийг анхдагчаар идэвхгүй болгодог.
- riscv64-unknown-linux-musl зорилтот платформ нь бүтээх баталгаа өгдөг боловч туршилтын багцыг дамжуулах баталгаа өгдөггүй 2-р түвшний дэмжлэг рүү шилжсэн.
Түүнчлэн, бид Rust-тай холбоотой саяхан зарласан төсөл, арга хэмжээг онцлон тэмдэглэхийг хүсч байна:
- Microsoft компани Rust хэлийг 1-р түвшний хэл болгон шинэчилсэн бөгөөд компанийн хөгжүүлэлтийн бүх үе шатанд бүрэн дэмжлэг үзүүлэх болно. Өмнө нь C++, C#, болон TypeScript хэлнүүдэд 1-р түвшний дэмжлэг үзүүлдэг байсан. Rust нь аль хэдийн 100 гаруй Microsoft репозиторт ашиглагдаж байна. Бусад зүйлсийн дотор Rust бүрэлдэхүүн хэсгүүдийг Microsoft 365 болон Copilot зэрэг бүтээгдэхүүнүүдэд аль хэдийн ашигласан бөгөөд MSVC хөрвүүлэгчийн хувьд rust хөрвүүлэгч дээр суурилсан Rust-д зориулсан тусгай backend болох rustc_codegen_utc-г боловсруулсан.
Майкрософт аюулгүй байдлын чухал кодыг бэхжүүлэхийн тулд Rust-ийг ашиглах үндсэн зорилгыг дурдсан. Microsoft Azure-ийн CTO-ийн мэдээлснээр бүх эмзэг байдлын ойролцоогоор 70% нь Windows Rust ашигласнаар зайлсхийх боломжтой санах ойн удирдлагын асуудлаас үүдэлтэй.
- Google үүнийг цөмөөс устгасан. Linux C хэл дээр бичигдсэн хуучин Binder IPC хэрэгжилтийг Rust хэл дээр дахин бичсэн шинэ Binder IPC драйверын оронд хуучирсан. Хуучин драйвер нь 15 жилийн хугацаанд техникийн ихээхэн өр, олон тооны хүндрэлүүд хуримтлагдсан нь алдаа илрүүлэх, засвар үйлчилгээ хийх, шинэ функцуудыг нэмэхэд саад болж байгааг тэмдэглэжээ. Rust хэл дээрх Binder IPC драйверыг үндсэн драйвер болгон томилсон бөгөөд туршилтын хөгжүүлэлт болгон танилцуулахаа больсон.
- Tor хэрэгслийн багцын Rust хувилбар болох Arti 2.7.0 хувилбарыг гаргалаа. Arti-ийн кодын суурь нь C хувилбарыг бүрэн орлох түвшинд хүрмэгц Tor хөгжүүлэгчид Arti-г Tor-ийн үндсэн хувилбар болгож, C хувилбарын засвар үйлчилгээг аажмаар зогсоохоор төлөвлөж байна. Шинэ хувилбарт реле болон бусад функцүүдийн хөгжүүлэлт багтсан болно. серверүүд Баримт бичгийн задлан шинжлэх, лавлах серверийн толин тусгал дэмжлэг, DNS урсгалыг боловсруулахтай холбоотой лавлах эрх мэдлийн (DA) функцууд. Тохиргооны өөрчлөлт болон шалгалтын RPC хэрэгжилтийг нэмсэн. Хэд хэдэн эмзэг байдлыг зассан - onion үйлчилгээний админуудад системээ яаралтай шинэчлэхийг зөвлөж байна.
Эх сурвалж: opennet.ru
