Rust бағдарламалау тілі шығарылымы 2021 (1.56)

Mozilla жобасы негізін қалаған, бірақ қазір Rust Foundation тәуелсіз коммерциялық емес ұйымының қолдауымен әзірленген Rust 1.56 жүйелік бағдарламалау тілінің шығарылымы жарияланды. Кәдімгі нұсқа нөмірінен басқа, шығарылым Rust 2021 деп белгіленді және соңғы үш жылда ұсынылған өзгерістердің тұрақтануын білдіреді. Rust 2021 сонымен қатар келесі үш жылда функционалдылықты арттыру үшін негіз болады, Rust 2018 шығарылымы соңғы үш жылда тілдің дамуына негіз болған сияқты.

Үйлесімділікті сақтау үшін әзірлеушілер өз бағдарламаларында «2015», «2018» және «2021» белгілерін пайдалана алады, бұл бағдарламаларға Rust таңдалған басылымдарына сәйкес тіл күйі бөліктерімен байланыстыруға мүмкіндік береді. Басылымдар үйлесімсіз өзгерістерді бөлектеу үшін енгізілді және жүк пакеттерінің метадеректерінде «[пакет]» бөліміндегі «шығарылым» өрісі арқылы конфигурацияланады. Мысалы, «2018» басылымы 2018 жылдың соңындағы жағдай бойынша тұрақтандырылған функционалдылықты қамтиды және үйлесімділікті бұзбайтын барлық кейінгі өзгерістерді қамтиды. 2021 жылғы шығарылым ағымдағы 1.56 шығарылымында ұсынылған және болашақта енгізу үшін мақұлданған өзара әрекеттесуді бұзатын мүмкіндіктерді қосымша қамтиды. Тілдің өзінен басқа, редакторлар құралдар мен құжаттаманың күйін де ескереді.

Rust 2021 жылы тіркелген негізгі сәйкессіздіктер:

  • Жабылған жерлердегі бөлек түсіру - жабулар енді бүкіл идентификатордың орнына жеке өріс атауларын жаза алады. Мысалы, "|| ax + 1» тек «a» орнына «балтаны» түсіреді.
  • Массивтерге арналған IntoIterator қасиеті: array.into_iter() жиым элементтерін сілтемелер бойынша емес, мәндер бойынша қайталауға мүмкіндік береді.
  • «|» өрнектерін өңдеу макро_ережелерде өзгертілді Үлгілерде (логикалық НЕМЕСЕ) - Сәйкестіктердегі ":pat" спецификаторы енді "A | В».
  • Жүк пакетінің менеджері әдепкі бойынша Rust 1.51 нұсқасында қолдау көрсетілетін мүмкіндіктерді шешу құралының екінші нұсқасын қамтиды.
  • TryFrom, TryInto және FromIterator белгілері кіріспе стандартты кітапхана модуліне қосылды.
  • Дүрбелең!(..) және assert!(expr, ..) макростары енді әрқашан println!() сияқты жолдарды пішімдеу үшін format_args!(..) пайдаланады.
  • ident#, ident»...» және ident'...' өрнектері тіл синтаксисінде сақталған.
  • bare_trait_objects және ellipsis_inclusive_range_patterns ескертулері қателерге жылжытылды.

Rust 1.56-дағы жаңалық:

  • Cargo.toml сайтындағы «[пакет]» бөлімінде тот нұсқасы өрісі қосылды, ол арқылы жәшік бумасына арналған Rust бағдарламасының ең аз қолдау көрсетілетін нұсқасын анықтауға болады. Ағымдағы нұсқа көрсетілген параметрге сәйкес келмесе, Cargo қате туралы хабармен жұмысын тоқтатады.
  • Үлгіні "байланыстыру @ үлгі" өрнектері арқылы сәйкестендіру кезінде қосымша байланыстыруларды көрсетуге қолдау көрсетіледі (мысалы, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • API жаңа бөлігі тұрақты санатқа ауыстырылды, оның ішінде белгілердің әдістері мен іске асырылуы тұрақтандырылды:
    • std::os::unix::fs::chroot
    • Қауіпсіз ұяшық::raw_get
    • BufWriter::parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Функцияларда тұрақты мәндердің орнына кез келген контексте пайдалану мүмкіндігін анықтайтын «const» атрибуты қолданылады.
    • std::mem::transmute
    • [T]::бірінші
    • [T]::бірінші_бөлу
    • [T]::соңғы
    • [T]::соңғы_бөлу
  • Компилятор LLVM 13 нұсқасын пайдалануға ауыстырылды.
  • Қолдаудың екінші деңгейі aarch64-apple-ios-sim платформасы үшін және үшінші деңгей powerpc-unknown-freebsd және riscv32imc-esp-espidf платформалары үшін жүзеге асырылды. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз, ресми құрастыруларды жариялаусыз немесе кодты құрастыру мүмкіндігін тексерусіз.

Естеріңізге сала кетейік, Rust жад қауіпсіздігіне бағытталған, жадты автоматты басқаруды қамтамасыз етеді және қоқыс жинағышты немесе жұмыс уақытын пайдаланбай жұмысты орындауда жоғары параллелизмге қол жеткізу құралын ұсынады (орындау уақыты стандартты кітапхананың негізгі инициализациясы мен қызмет көрсетуіне дейін қысқарады).

Rust-тың жадты автоматты басқаруы көрсеткіштерді басқару кезіндегі қателерді жояды және жад аймағына ол босатылғаннан кейін қол жеткізу, нөлдік көрсеткіш сілтемелері, буфердің асып кетуі және т.б. сияқты төмен деңгейлі жад манипуляциясынан туындайтын мәселелерден қорғайды. Кітапханаларды тарату, құрастыруды қамтамасыз ету және тәуелділіктерді басқару үшін жоба Cargo пакетінің менеджерін әзірлеуде. Crates.io репозиторийіне хостинг кітапханалары үшін қолдау көрсетіледі.

Ақпарат көзі: opennet.ru

пікір қалдыру