Rust 1.75 болон unikernel Hermit 0.6.7 програмчлалын хэлийг гаргасан

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

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

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

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

  • Хувийн шинж чанарт "async fn" болон "->impl Trait" тэмдэглэгээг ашиглах чадварыг нэмсэн. Жишээлбэл, “->impl Trait”-ийг ашигласнаар та давталт буцаах шинж чанарын аргыг бичиж болно: trait Container { fn items(&self) -> impl Iterator; } impl MyContainer-д зориулсан контейнер { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Та мөн "async fn" ашиглан шинж чанаруудыг үүсгэж болно: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // өргөтгөх болно: // fn fetch(&self, url: Url) -> impl Future; }

  • Заагчтай харьцуулахад байт офсетийг тооцоолох API нэмэгдсэн. Нүцгэн заагчтай ажиллах үед (“*const T” ба “*mut T”) заагч дээр офсет нэмэх үйлдлүүд шаардлагатай байж болно. Өмнө нь үүний тулд “::add(1)” гэх мэт “size_of::()” хэмжээтэй харгалзах байтуудын тоог нэмэх боломжтой байсан. Шинэ API нь энэ үйлдлийг хялбарчилж, төрлүүдийг эхлээд "*const u8" эсвэл "*mut u8" болгон хувиргахгүйгээр байт офсетийг удирдах боломжтой болгодог.
    • заагч::байт_нэмэх
    • заагч::байтын_офсет
    • заагч:: byte_offset_from
    • заагч::байт_дэд
    • заагч:: ороох_байт_нэмэх
    • заагч:: ороох_байтын_офсет
    • заагч ::wrapping_byte_sub
  • Rustc хөрвүүлэгчийн гүйцэтгэлийг нэмэгдүүлэх ажлыг үргэлжлүүлэв. Холболтын дараах үе шатанд ажилладаг, урьдчилан бэлтгэсэн гүйцэтгэлийн профайлаас мэдээллийг ашигладаг BOLT оновчтой болгогчийг нэмсэн. BOLT ашиглах нь процессорын кэшийг илүү үр ашигтай ашиглахын тулд librustc_driver.so номын сангийн кодын байршлыг өөрчилснөөр хөрвүүлэгчийн гүйцэтгэлийг ойролцоогоор 2% хурдасгах боломжийг олгоно.

    LLVM-ийн оновчлолын чанарыг сайжруулахын тулд "-Ccodegen-units=1" сонголттой rustc хөрвүүлэгчийг бүтээх ажилд орсон. Гүйцэтгэсэн туршилтууд нь "-Ccodegen-units=1"-ийн бүтээцэд ойролцоогоор 1.5%-иар гүйцэтгэлийн өсөлтийг харуулж байна. Нэмэгдсэн оновчлолууд нь зөвхөн x86_64-үл мэдэгдэх-linux-gnu платформ дээр анхдагчаар идэвхждэг.

    Өмнө дурьдсан оновчлолуудыг Google-ээс Rust дээр бичсэн Android платформын бүрэлдэхүүн хэсгүүдийг бүтээх хугацааг багасгах зорилгоор туршиж үзсэн. Android-г бүтээхдээ "-C codegen-units=1"-ийг ашигласнаар багажийн хэмжээг 5.5%-иар багасгаж, гүйцэтгэлийг нь 1.8%-иар нэмэгдүүлэх боломжтой болсон бол уг хэрэгслийг бүтээх хугацаа бараг хоёр дахин нэмэгджээ.

    Холболтын цагийн хог хаягдлыг цуглуулах (“--gc-sections”) нь гүйцэтгэлийн өсөлтийг 1.9%, холбоосын цагийг оновчтой болгох (LTO) 7.7%, профайл дээр суурилсан оновчлолыг (PGO) 19.8% хүртэл идэвхжүүлсэн. Төгсгөлд нь BOLT хэрэгслийг ашиглан оновчлолыг хийсэн бөгөөд энэ нь бүтээх хурдыг 24.7% хүртэл нэмэгдүүлэх боломжийг олгосон боловч хэрэгслийн хэмжээ 10.9% -иар нэмэгдсэн.

    Rust 1.75 болон unikernel Hermit 0.6.7 програмчлалын хэлийг гаргасан

  • API-ийн шинэ хэсгийг тогтвортой гэсэн ангилалд шилжүүлж, шинж чанаруудын арга, хэрэгжилтийг тогтворжуулсан:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • Файл::тогтоосон_өөрчлөгдсөн
    • Файл::тогтоосон_цаг
    • IpAddr:: to_canonical
    • Ipv6Addr::to_canonical
    • Сонголт::зүсмэл
    • Сонголт :: as_mut_slice
    • заагч::байт_нэмэх
    • заагч::байтын_офсет
    • заагч:: byte_offset_from
    • заагч::байт_дэд
    • заагч:: ороох_байт_нэмэх
    • заагч:: ороох_байтын_офсет
    • заагч ::wrapping_byte_sub
  • Үүнийг тогтмолуудын оронд ямар ч нөхцөлд ашиглах боломжийг тодорхойлдог "const" шинж чанарыг дараах функцүүдэд ашигладаг.
    • Ipv6Addr::to_ipv4_mapped
    • МагадгүйUninit::sume_init_read
    • МагадгүйUninit :: тэглэсэн
    • mem::dicriminant
    • mem::тэглэсэн
  • Гурав дахь түвшний дэмжлэгийг csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd болон mipsel-unknown-netbsd платформуудад хэрэгжүүлсэн. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээлийг нийтлэх, кодыг бүтээх боломжтой эсэхийг шалгахгүйгээр.

Нэмж дурдахад, Rust хэл дээр бичигдсэн тусгай цөм (unikernel) боловсруулдаг Hermit төслийн шинэ хувилбарыг тэмдэглэж болно, энэ нь гипервизор эсвэл нэмэлт давхаргагүйгээр нүцгэн техник хангамж дээр ажиллах боломжтой бие даасан програмуудыг бий болгох хэрэгслээр хангадаг. мөн үйлдлийн системгүй. Аппликешныг бүтээхдээ үйлдлийн системийн цөм болон системийн номын сантай холбоогүй, шаардлагатай бүх функцийг бие даан хэрэгжүүлдэг номын сантай статик байдлаар холбогддог. Төслийн кодыг Apache 2.0 болон MIT лицензийн дагуу түгээдэг. Assembly нь Rust, Go, Fortran, C болон C++ хэл дээр бичигдсэн програмуудыг бие даан гүйцэтгэхэд зориулагдсан. Төсөл нь QEMU болон KVM ашиглан Hermit-ийг эхлүүлэх боломжийг олгодог өөрийн ачаалагчийг хөгжүүлж байна.

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

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