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

Нийтэлсэн системийн програмчлалын хэлний хувилбар Зэв 1.40, Mozilla төслөөс үүсгэн байгуулсан. Энэ хэл нь санах ойн аюулгүй байдалд анхаарлаа төвлөрүүлж, санах ойн автомат удирдлагаар хангадаг бөгөөд хог цуглуулагч, хог хаягдал ашиглахгүйгээр өндөр түвшний параллелизмд хүрэх хэрэгслүүдээр хангадаг. ажиллах хугацаа.

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

Үндсэн инноваци:

  • "Атрибутыг ашиглан бүтэц (бүтэц) болон тооллого (Variant блок бүхий тоолол) тэмдэглэх чадварыг нэмсэн.#[бүрэн бус]", аль нь Энэ нь олгодог ирээдүйд зарласан бүтэц, тооллогод шинэ талбар, сонголтуудыг нэмнэ. Жишээлбэл, олон нийтэд зарласан талбар бүхий бүтэцтэй модулиудыг хөгжүүлэгчид "#[бүрэн_бүрэн биш]"-г ашиглан ирээдүйд шинэ талбар нэмж болох бүтцийг тэмдэглэх боломжтой. Өнөөг хүртэл энэ нөхцөлд хөгжүүлэгч талбаруудыг хувийн байдлаар зарлах, талбаруудын хувиршгүй жагсаалтад заавал оруулах хоёрын хооронд сонголт хийхээс өөр аргагүйд хүрсэн. Шинэ атрибут нь энэ хязгаарлалтыг арилгаж, өмнө нь эмхэтгэсэн гадаад кодыг эвдэх эрсдэлгүйгээр ирээдүйд шинэ талбар нэмэх боломжийг танд олгоно. Крат багцуудад "тохирох" хэсгийн сонголтуудыг тааруулахдаа ирээдүйн боломжит талбаруудыг хамарсан "_ => {...}" маскын тодорхой тодорхойлолт шаардлагатай, эс тэгвээс шинэ талбар нэмэх үед алдаа гарч ирнэ.
  • Нэмсэн төрлийн контекстэд процедурын макро mac!() дуудах чадвар. Жишээлбэл, хэрэв "төрөлд_өргөтгөх" нь процедурын макро бол "type Foo = type_to_expand!(bar);" гэж бичиж болно.
  • "External { ... }" блокуудад нэмсэн “bang!()” макро зэрэг процедурын болон атрибутын макро ашиглах чадвар, жишээлбэл:

    макро дүрэм! make_item { ($нэр: таних) => { fn $нэр(); } }

    гадаад {
    хийх_зүйл!(альфа);
    хийх_зүйл!(бета);
    }

    гадаад "С" {
    #[миний_билэг_макро] fn foo();
    }

  • Макро дээр хэрэгжүүлсэн "макро_дүрэм!" элементүүдийг үүсгэх чадвар. "Макро дүрэм!" үүсгэж байна. функцтэй төстэй макро ("mac!()") болон атрибут хэлбэрийн макросуудад ("#[mac]") аль алинд нь боломжтой.
  • $m:meta зураглалын элемент дотор нэмсэн дурын токен тоолох утгыг дэмжих ("[TOKEN_STREAM]", "{TOKEN_STREAM}" болон "(TOKEN_STREAM)"), жишээ нь:

    макро дүрэм! хүлээн авах_мета {($м:мета) => {}}
    хүлээн авах_мета!( миний:: зам );
    хүлээн авах_мета!( миний :: зам = "асдаг" );
    хүлээн авах_мета!( миний::зам ( a b c ) );
    зөвшөөрөх_мета!( миний::зам [ a b c ] );
    зөвшөөрөх_мета!( миний :: зам { a b c } );

  • Rust 2015 горимд NLL (Lexical Non-Lexical Lifetimes) техникийг ашиглан хувьсагчийн зээллэгийг (зээлдэгч шалгагч) шалгах үед илэрсэн асуудлуудын хувьд алдаа гаралтыг идэвхжүүлсэн. Өмнө нь Rust 2018 горимд ажиллах үед анхааруулгыг алдаагаар сольсон.
    Өөрчлөлтийг Rust 2015 горимд шилжүүлсний дараа хөгжүүлэгчид эцэст нь хийж чадсан Үүнээс салах хуучин зээлийн шалгагчаас.

    Зээл авсан хувьсагчийн ашиглалтын хугацааг харгалзан үзэх шинэ механизмд суурилсан баталгаажуулалтын систем нь хуучин баталгаажуулалтын кодоор анзаарагдаагүй зарим асуудлыг тодорхойлох боломжийг олгосон гэдгийг эргэн санацгаая. Ийм шалгалтын алдааны гаралт нь өмнө нь ажиллаж байсан кодтой нийцтэй байдалд нөлөөлж болзошгүй тул алдааны оронд анхааруулга өгсөн.

  • Үүнийг тогтмолуудын оронд ямар ч нөхцөлд ашиглах боломжийг тодорхойлдог "const" шинж чанарыг is_power_of_two функцэд (тэмдэггүй бүхэл тоонд) ашигладаг.
  • API-ийн шинэ хэсэг нь todo!() макро болон slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, аргуудыг тогтворжуулсан зэрэг тогтвортой ангилалд шилжсэн.
    Сонголт::as_deref, Сонголт::as_deref_mut, Сонголт::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32} f64}::from_be_bytes, {f32,f64}::from_le_bytes, and {f32,f64}::from_ne_bytes.

  • Багц менежерийн ачаанд
    хэрэгжүүлсэн диск дээрх хөрвүүлэгчийн анхааруулгыг кэшлэх. "Ачааны мета өгөгдөл" гэсэн сонголтыг "ачааны мета өгөгдөл" команд дээр нэмсэн--шүүлтүүр-платформ" Зөвхөн хамаарлыг шийдвэрлэх баганад заасан зорилтот платформд холбогдсон багцуудыг харуулах. Хүчинтэй TLS хувилбаруудыг тодорхойлохын тулд http.ssl-хувилбарын тохиргооны сонголтыг нэмсэн.
    Хэсгийг нийтлэх боломжийг нэмсэн "хөгжүүлэлтийн хамаарал"хувилбар" товчийг заахгүйгээр.

  • Rustc хөрвүүлэгч нь thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 болон mips64el-unknown-linux-muslabi64 зорилтот платформуудад гурав дахь түвшний дэмжлэг үзүүлдэг. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээн байгуулалтыг нийтлэхгүйгээр.

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

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