Rust 1.61 Программалоо тили релиз

Mozilla долбоору тарабынан негизделген, бирок азыр Rust Foundation көз карандысыз коммерциялык эмес уюмунун демөөрчүлүгү астында иштелип чыккан Rust 1.61 жалпы максаттуу программалоо тилинин релизи жарыяланды. Бул тил эстутумдун коопсуздугуна көңүл бурат жана таштанды жыйгычты жана иштөө убактысын колдонуудан качуу менен жогорку жумуш параллелизмине жетүү үчүн каражаттарды камсыз кылат (иштөө убактысы стандарттык китепкананы негизги инициализацияга жана тейлөөгө чейин кыскарган).

Rust'тун эстутум менен иштөө ыкмалары иштеп чыгуучуну көрсөткүчтөрдү манипуляциялоодо каталардан куткарат жана эстутумдун төмөнкү деңгээлдеги иштөөсүнөн улам келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутумдун аймагына ал бошотулгандан кийин жетүү, нөл көрсөткүчтөрдү шилтемеден чыгаруу, буфердин ашып кетиши ж.б. Китепканаларды жайылтуу, курууну камсыз кылуу жана көз карандылыкты башкаруу үчүн долбоор Cargo пакетинин менеджерин иштеп чыгат. crates.io репозиторий китепканаларды хостинг үчүн колдоого алынат.

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

Негизги инновациялар:

  • Негизги функциядан өзүңүздүн кайтаруу коддоруңузду аныктоого болот. Башында Rust'тун негизги функциясы "()" (бирдик) түрүн гана кайтара алган, ал ар дайым ийгиликтүү чыгуу статусун көрсөткөн, эгерде иштеп чыгуучу "process::exit(code)" функциясын ачык атабаса. Rust 1.26да, негизги функцияда туруксуз Токтотуу касиетин колдонуп, C программаларындагы EXIT_SUCCESS жана EXIT_FAILURE коддоруна туура келген “Ok” жана “Err” маанилерин кайтарууга мүмкүн болду. Rust 1.61де токтотуу белгиси туруктуу кылынды жана өзүнчө ExitCode түрү белгилүү бир кайтаруу кодун көрсөтүү үчүн сунушталды, ал платформага тиешелүү кайтаруу түрлөрүн алдын ала аныкталган SUCCESS жана FAILURE константаларын жана From ыкмасын камсыз кылуу аркылуу абстракциялайт. ыңгайлаштырылган кайтаруу кодун кайтаруу үчүн. колдонуу std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } ExitCode:: ИЙГИЛИК }
  • “const fn” туюнтмасы аркылуу аныкталган функциялардын кошумча мүмкүнчүлүктөрү турукташтырылды, аларды регулярдуу функциялар катары гана атабастан, ошондой эле константалардын ордуна каалаган контекстте колдонсо болот. Бул функциялар иштөө убагында эмес, компиляция убагында эсептелинет, ошондуктан алар белгилүү бир чектөөлөргө дуушар болушат, мисалы, туруктуулардан гана окуу мүмкүнчүлүгү. Жаңы версияда const функцияларынын ичинде функция көрсөткүчтөрү менен негизги операцияларга уруксат берилет (көрсөткүчтөрдү түзүүгө, өткөрүүгө жана чыгарууга уруксат берилет, бирок функцияны көрсөткүч менен чакырууга болбойт); T сыяктуу const функцияларынын жалпы параметрлери үчүн өзгөчөлүк чектери: Көчүрмө; динамикалык түрдө жөнөтүлүүчү сапаттар (дын касиеттери); impl Функциянын аргументтери жана кайтарым маанилери үчүн сапат түрлөрү.
  • Агым Stdin, Stdout жана Stderr'ди std::io ичинде иштетет, эми кулпуланганда статикалык ("'static") өмүрү бар, бул "let out = std::io::stdout().lock();" сыяктуу конструкцияларга мүмкүндүк берет. туткасын алуу жана бир сөз айкашы менен кулпу орнотуу менен.
  • API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Курсор үчүн жаз<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Токтотуу
    • std::thread::JoinHandle::is_finished
  • Аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган "const" атрибуту функцияларда колдонулат:
    • <*const T>::offset жана <*mut T>::offset
    • <*const T>::wrapping_offset жана <*mut T>::wrapping_offset
    • <*const T>:: add and <*mut T>:: add
    • <*const T>::sub жана <*mut T>::sub
    • <*const T>::wrapping_add жана <*mut T>::wrapping_add
    • <*const T>::wrapping_sub жана <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Кошумчалай кетсек, “Rust: Critical Retrospective” макаласын микропрограммада колдонулган Xous микро ядросунун операциялык тутумун иштеп чыгуу учурунда 100 миң сап код жазгандан кийин Rust тилинин кыскача баяндамасы менен белгилей аласыз. Кемчиликтерге түшүнүү кыйын синтаксисин, тилдин толук эместигин жана үзгүлтүксүз өнүгүшүн, кайталануучу түзүлүштөрдүн жоктугун, Crates.io'го көз карандылык ишениминин типтүү көйгөйлөрүн жана коопсуз кодду жазуу үчүн белгилүү бир тартипти сактоонун зарылдыгын камтыйт. Күтүлгөндөн ашкан өзгөчөлүктөргө рефакторинг коду жана тез прототиптөө учурунда кошулган “хакерлерди” кайра иштетүү үчүн куралдар кирет.

Source: opennet.ru

Комментарий кошуу