Mozilla долбоору тарабынан негизделген, бирок азыр Rust Foundation көз карандысыз коммерциялык эмес уюмунун демөөрчүлүгү астында иштелип чыккан Rust 1.57 системалык программалоо тилинин чыгарылышы жарык көрдү. Бул тил эстутумдун коопсуздугуна көңүл бурат, эстутумду автоматтык башкарууну камсыз кылат жана таштанды жыйноочу же иштөө убактысын колдонбостон жогорку тапшырма параллелизмине жетүү үчүн каражаттарды берет (иштөө убактысы стандарттык китепкананы негизги инициализацияга жана тейлөөгө чейин кыскарган).
Rust'тун эстутумдун автоматтык башкаруусу көрсөткүчтөрдү манипуляциялоодо каталарды жок кылат жана эстутумдун төмөнкү деңгээлдеги манипуляциясынан келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутум аймагына ал бошогондон кийин жетүү, нөл көрсөткүчтөр шилтемелери, буферди ашып кетүү ж.б. Китепканаларды жайылтуу, чогултууну камсыз кылуу жана көз карандылыкты башкаруу үчүн долбоор Cargo пакетинин менеджерин иштеп чыгууда. crates.io репозиторий китепканаларды хостинг үчүн колдоого алынат.
Негизги инновациялар:
- "Паник!" макросун колдонуу турукташты. компиляция учурунда түзүлгөн контексттерде, мисалы, "const fn" декларациялары. Мындан тышкары, "паника!" const декларациялары "тастыктоо!" макросун колдонууга мүмкүндүк берет. жана башка стандарттуу китепкана API'лери. Стабилдештирүү форматтоо инфраструктурасын толугу менен камтый элек, андыктан анын азыркы түрүндө "паника!" статикалык саптар менен гана (паника!(“...")) же алмаштырууда бир интерполяцияланган "&str" мааниси менен гана колдонулушу мүмкүн (panic!("{}", a)), ал "{" менен чектелиши керек. }" форматтоо спецификаторлору жана башка түрлөрү жок. Келечекте макростордун туруктуу контексттерде колдонулушу кеңейтилет, бирок стабилдештирилген мүмкүнчүлүктөр компиляция стадиясында ырастоо текшерүүлөрүн жүргүзүү үчүн жетиштүү: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = ырастоо!(std::mem::size_of:: () == 8);
- Жүк пакетинин менеджери "дев", "релиз", "тест" жана "стенд" менен эле чектелбестен, ыктыярдуу аталыштар менен профилдерди колдонууга мүмкүндүк берет. Мисалы, акыркы продукт жыйындысы түзүлгөндө гана шилтеме стадиясында (LTO) оптималдаштырууну иштетүү үчүн, сиз Cargo.toml сайтында “өндүрүш” профилин түзүп, ага “lto = true” желегин кошо аласыз. Бирок, өз профилдериңизди аныктоодо, андан демейки жөндөөлөрдү мурастоо үчүн учурдагы профилди көрсөтүшүңүз керек. Төмөндөгү мисал "lto = true" желегин кошуу менен "чыгаруу" профилин толуктаган "өндүрүш" профилин түзөт. Профилдин өзү "--profile production" опциясы менен жүктү чакыруу менен активдештирет жана монтаждоо артефактылары "максат/өндүрүш" каталогуна жайгаштырылат. [profile.production] мураска алат = "чыгаруу" lto = чындык
- Vec, String, HashMap, HashSet жана VecDeque түрлөрү үчүн try_reserve колдонуу турукташтырылды, бул эстутум бөлүштүрүү операцияларынын жыштыгын азайтуу жана алдын алуу үчүн берилген типтеги элементтердин белгилүү бир саны үчүн алдын ала орун ээлеп коюуга мүмкүндүк берет. эстутумдун жетишсиздигинен иштөө учурунда бузулат.
- "m!{ .. }.method()" жана "m!{ .. }?" сыяктуу туюнтмаларда тармал кашаалар менен макросторду көрсөтүүгө уруксат берилет.
- File::read_to_end жана read_to_string функцияларынын аткарылышы оптималдаштырылды.
- Юникоддун спецификациясын колдоо 14.0 версиясына жаңыртылган.
- Кайтаруу мааниси этибарга алынбай калса, эскертүү берүү үчүн "#[колдонушу керек]" деп белгиленген функциялардын саны кеңейтилди, бул функция жаңы маанини кайтаруунун ордуна маанилерди өзгөртөт деп кабыл алуудан келип чыккан каталарды аныктоого жардам берет.
- libgccjit жардамы менен кодду түзүү үчүн эксперименталдык сервер кошулду.
- API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
- [T; N]::as_mut_slice
- [T; N]::as_slice
- коллекциялар::TryReserveError
- HashMap::try_reserve
- HashSet::try_reserve
- String::try_reserve
- String::try_reserve_exact
- Vec::try_reserve
- Vec :: try_reserve_exact
- VecDeque::try_reserve
- VecDeque :: try_reserve_exact
- Iterator::map_while
- iter::MapWhile
- proc_macro::is_available
- Command::get_program
- Command::get_args
- Command::get_envs
- Command::get_current_dir
- CommandArgs
- CommandEnvs
- Аны константалардын ордуна каалаган контекстте колдонсо болорун аныктаган “const” атрибуту hint::unreachable_unchecked функциясында колдонулат.
- Үчүнчү колдоо деңгээли armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi жана armv7a-kc үчүн ишке ашырылган. solid_asp3-eabihf платформалары. Үчүнчү деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөсүз, расмий түзүмдөрдү жарыялоосуз же кодду курууга болорун текшерүүсүз.
Source: opennet.ru
