Rust 1.53 гарсан. Google нь Linux цөмд Rust-ийн дэмжлэгийг нэмж санхүүжүүлэх болно

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

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

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

  • Массивуудын хувьд IntoIterator шинж чанарыг хэрэгжүүлсэн бөгөөд энэ нь массивын элементүүдийн давталтыг утгаараа зохион байгуулах боломжийг олгодог: for i in [1, 2, 3] { .. }

    Мөн давталтуудыг хүлээн авдаг аргууд руу массив дамжуулах боломжтой, жишээлбэл: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Өмнө нь IntoIterator нь зөвхөн массивын лавлагаанд хэрэгждэг байсан, i.e. лавлагаа (“&[1, 2, 3]”) эсвэл “[1, 2, 3].iter()” ашиглах шаардлагатай утгуудыг давтах. Өмнө нь array.into_iter()-аас (&array).into_iter() руу хөрвүүлэгч хөрвүүлснээс үүссэн нийцтэй байдлын асуудлаас болж массивын IntoIterator-ийг хэрэгжүүлэхэд саад болсон. Эдгээр асуудлыг шийдвэрлэх арга замаар шийдсэн - хөрвүүлэгч нь IntoIterator шинж чанарын хэрэгжилт байхгүй мэт array.into_iter()-г (&array).into_iter() болгон хөрвүүлсээр байх болно, гэхдээ зөвхөн ".into_iter() ашиглан аргыг дуудах үед л болно. )" синтакс болон "[1, 2, 3] дотор", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3]" хэлбэрээр дуудлагад хүрэлгүйгээр )".

  • "|" илэрхийллийг зааж өгөх боломжтой. (логик OR үйлдэл) загварын аль ч хэсэгт, жишээ нь “Зарим(1) | Зарим(2)" гэж та одоо "Зарим(1 | 2)" гэж бичиж болно: үр дүнг тааруулах { Ok(Зарим(1 | 2)) => { .. } Алдаа(Миний алдаа { төрөл: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • Юникод UAX 31-ийн тодорхойлолтод тодорхойлсон үндэсний тэмдэгтүүдийг оруулаад эможи тэмдэгтүүдийг оруулалгүйгээр танигчдад ASCII бус тэмдэгт ашиглахыг зөвшөөрнө. Хэрэв та өөр боловч ижил төстэй тэмдэгт ашигладаг бол хөрвүүлэгч анхааруулга өгөх болно. const BLÅHAJ: &str = "🦈"; struct 人 {名字: Мөр, } let α = 1; letsos = 2; Анхааруулга: танигч хосыг 's' болон 's' хооронд андуурч болзошгүй гэж үзнэ
  • API-ийн шинэ хэсгийг тогтвортой ангилалд шилжүүлсэн бөгөөд үүнд дараах тогтворжуулсан:
    • массив::-аас_ref
    • массив::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet:: хадгалах
    • BTreeMap:: хадгалах
    • BufReader::харьцангуй
    • cmp::min_by
    • cmp::мин_түлхүүрээр
    • cmp::max_by
    • cmp :: хамгийн их_түлхүүрээр
    • DebugStruct :: дуусгах_бүрэн_байхгүй
    • Үргэлжлэх хугацаа::ТЭГ
    • Үргэлжлэх хугацаа::MAX
    • Үргэлжлэх хугацаа::тэг
    • Үргэлжлэх хугацаа:: ханасан_нэмэх
    • Үргэлжлэх хугацаа:: ханасан_дэд
    • Үргэлжлэх хугацаа:: ханасан_муль
    • f32 :: хэвийн бус байна
    • f64 :: хэвийн бус байна
    • Массивуудад зориулсан IntoIterator
    • {бүхэл тоо}::BITS
    • io::Алдаа:: Дэмжигдээгүй
    • Тэг биш*::тэг
    • NonZero*::realing_teers
    • Сонголт :: оруулах
    • Захиалга ::is_eq
    • Захиалга ::is_ne
    • Захиалга ::is_lt
    • Захиалга ::is_gt
    • Захиалга ::is_le
    • Захиалга ::is_ge
    • OsStr::make_ascii_make_case
    • OsStr::make_ascii_pupcase
    • OsStr ::to_ascii_ жижиг үсгээр
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::хүчтэй_тоог нэмэгдүүлэх
    • Rc::хүчтэй_тоог багасгах
    • slice ::IterMut :: as_slice
    • Slice::IterMut-д зориулсан AsRef<[T]>
    • impl SliceIndex for (Bound , Хүлэгдсэн )
    • Vec::дотроос нь сунгах
  • wasm64- үл мэдэгдэх-үл мэдэгдэх платформыг дэмжих гурав дахь түвшнийг хэрэгжүүлсэн. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээлийг нийтлэх, кодыг бүтээх боломжтой эсэхийг шалгахгүйгээр.
  • Ачааны багц менежерийг Git репозиторын (HEAD) үндсэн салбарт "гол" нэрийг анхдагчаар ашиглахаар шилжүүлсэн. Мастерийн оронд main нэрийг ашигладаг репозиторуудад байршуулсан хамаарлууд салбар = "гол"-ыг тохируулах шаардлагагүй болсон.
  • Хөрвүүлэгчид LLVM-ийн хамгийн бага хувилбарт тавигдах шаардлагыг LLVM 10 болгож нэмэгдүүлсэн.

Нэмж дурдахад, Rust хэл дээрх бүрэлдэхүүн хэсгүүдийг хөгжүүлэх хэрэгслүүдийн Линуксийн цөмд интеграцчиллыг хөгжүүлэхэд зориулж санхүүжилт олгож байгааг тэмдэглэж болно. Энэхүү ажил нь "Let's Encrypt" төслийн үүсгэн байгуулагч, HTTPS-ийг сурталчлах, мэдээллийн аюулгүй байдлыг нэмэгдүүлэх технологийн хөгжлийг дэмжих ISRG байгууллагын (Интернэтийн аюулгүй байдлын судалгааны групп) ивээл дор Проссимо төслийн хүрээнд хийгдэнэ. Интернет. Санхүүжилтийг Google-ээс гаргах бөгөөд энэ нь Linux-д зориулсан зэвсгийн төслийн зохиогч Мигель Ожедагийн ажлын хөлсийг төлөх юм. Өмнө нь ISRG болон Google нь curl хэрэгсэлд зориулсан өөр HTTP backend үүсгэх, Apache http серверийн шинэ TLS модулийг хөгжүүлэх ажлыг аль хэдийн санхүүжүүлсэн.

Майкрософт болон Google-ийн мэдээлснээр эмзэг байдлын 70 орчим хувь нь санах ойн аюулгүй ажиллагаанаас үүдэлтэй байдаг. Төхөөрөмжийн драйвер гэх мэт цөмийн бүрэлдэхүүн хэсгүүдийг боловсруулахдаа Rust хэлийг ашигласнаар санах ойн аюулгүй ажиллагаанаас үүдэлтэй эмзэг байдлын эрсдлийг бууруулж, санах ойг чөлөөлсний дараа санах ойн бүсэд хандах, буферийн хязгаарыг хэтрүүлэх зэрэг алдааг арилгах болно.

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

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

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