Rust 1.60 Варақаи забони барномасозӣ

Нашри забони барномасозии Rust 1.60, ки аз ҷониби лоиҳаи Mozilla асос ёфтааст, аммо ҳоло таҳти сарпарастии созмони мустақили ғайритиҷоратии Rust Foundation таҳия шудааст, нашр шуд. Забон ба бехатарии хотира тамаркуз мекунад ва воситаҳоро барои ноил шудан ба параллелизми баланди кор ҳангоми канорагирӣ аз истифодаи коллектори партовҳо ва вақти корӣ таъмин мекунад (вақти кор то оғозкунии асосӣ ва нигоҳдории китобхонаи стандартӣ кам карда мешавад).

Усулҳои коркарди хотираи Rust таҳиякунандаро аз хатогиҳо ҳангоми коркарди нишонаҳо наҷот медиҳанд ва аз мушкилоте, ки дар натиҷаи коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, барҳам додани ишораҳои нул, изофаи буфер ва ғайра муҳофизат мекунад. Барои паҳн кардани китобхонаҳо, таъмин кардани сохтан ва идоракунии вобастагӣ, лоиҳа менеҷери бастаи боркашониро таҳия мекунад. Анбори crates.io барои хостинги китобхонаҳо дастгирӣ карда мешавад.

Бехатарии хотира дар Rust дар вақти тартибдиҳӣ тавассути санҷиши истинод, нигоҳ доштани моликияти объект, нигоҳ доштани мӯҳлати умри объект (миқёс) ва арзёбии дурустии дастрасии хотира ҳангоми иҷрои код таъмин карда мешавад. Rust инчунин муҳофизатро аз фаромадани ададҳо таъмин мекунад, пеш аз истифода оғозкунии ҳатмии арзишҳои тағирёбандаро талаб мекунад, хатогиҳоро дар китобхонаи стандартӣ беҳтар идора мекунад, консепсияи истинодҳо ва тағирёбандаҳоро ба таври нобаёнӣ татбиқ мекунад, чопкунии қавии статикиро барои кам кардани хатогиҳои мантиқӣ пешниҳод мекунад.

Навовариҳои асосӣ:

  • Компилятори rustc дорои системаи устувори LLVM-и асоси барои тавлиди маълумоти фарогирӣ мебошад, ки барои арзёбии фарогирии код ҳангоми санҷиш истифода мешавад. Барои фаъол кардани маълумоти фарогирӣ ҳангоми васлкунӣ, шумо бояд парчами "-Cinstrument-coverage" -ро истифода баред, масалан, оғоз кардани васлкунӣ бо фармони "RUSTFLAGS= -C instrument-coverage" боркашонӣ созед". Пас аз ба кор андохтани файли иҷрошавандаи бо ин роҳ тартибдодашуда, файли default.profraw дар директорияи ҷорӣ захира карда мешавад, ки барои коркарди он шумо метавонед утилитаи llvm-profdata-ро аз ҷузъи llvm-tools-preview истифода баред. Натиҷаи аз ҷониби llvm-profdata коркардшуда метавонад пас аз он ба llvm-cov интиқол дода шавад, то гузориши фарогирии рамзи шарҳро тавлид кунад. Маълумот дар бораи истинод ба коди ибтидоӣ аз файли иҷрошавандаи тафтишшуда гирифта мешавад, ки маълумоти заруриро дар бораи пайвастшавӣ байни ҳисобкунакҳои фарогирӣ ва код дар бар мегирад. 1| 1|fn main() { 2| 1| println!("Салом, ҷаҳон!"); 3| 1|}
  • Дар менеҷери бастаи бор, дастгирии парчами "-timings" устувор карда шудааст, ки тавлиди гузориши муфассалро дар бораи рафти сохтмон ва вақти иҷрои ҳар як қадамро дар бар мегирад. Ҳисобот метавонад барои беҳтар кардани иҷрои раванди васлкунӣ муфид бошад.
  • Менеҷери бастаи боркаш синтаксиси навро барои механизми тартиб додани шартӣ ва интихоби вобастагии ихтиёрӣ пешниҳод мекунад, ки дар файли Cargo.toml бо роҳи номбар кардани рӯйхати хосиятҳои номбаршуда дар бахши [хусусиятҳо] танзим карда шудааст ва тавассути фаъол кардани хосиятҳо ҳангоми сохтани бастаҳо фаъол карда мешавад. бо истифода аз парчами "--функсияҳо". Версияи нав дастгирии вобастагиҳоро дар фазоҳои номҳои алоҳида ва вобастагии заиф илова мекунад.

    Дар ҳолати аввал, мумкин аст, ки унсурҳоро бо префикси "dep:" дар дохили бахши "[хусусиятҳо]" истифода баранд, то ба вобастагии ихтиёрӣ бидуни нишон додани ин вобастагӣ ҳамчун хусусият ба таври возеҳ пайваст шаванд. Дар ҳолати дуюм, дастгирии аломатгузорӣ бо аломати «?» илова карда шудааст. ("packet-name?/feature-name") вобастагии ихтиёрӣ, ки бояд танҳо дар сурате дохил карда шаванд, ки агар ягон моликияти дигар вобастагии ихтиёрии додашударо дар бар гирад. Масалан, дар мисоли зер фаъол кардани моликияти serde вобастагии "serde" ва инчунин моликияти "serde" барои вобастагии "rgb" имкон медиҳад, аммо танҳо агар вобастагии "rgb" дар ҷои дигар фаъол бошад: [вобастагӣ] serde = { версия = " 1.0.133", ихтиёрӣ = ҳақиқӣ } rgb = { версия = "0.8.25", ихтиёрӣ = ҳақиқӣ } [хусусиятҳо] serde = ["dep:serde", "rgb?/serde"]

  • Дастгирии мураттабсозии афзоянда, ки дар барориши охирин ғайрифаъол шуда буд, баргардонида шуд. Хатогии компилятор, ки боиси хомӯш шудани ин хусусият ҳал карда шуд.
  • Баъзе мушкилот бо таъмини таймерҳои фаврӣ бо кафолати вақти монотоникӣ, ки вақти сарфи системаро дар ҳолати хоб ба инобат мегирад, ҳал карда шуданд. Пештар OS API то ҳадди имкон барои кор кардани таймер истифода мешуд, ки дар он ҳолатҳои мушкилие, ки якрангии вақтро мешиканад, ба мисли мушкилоти сахтафзор, истифодаи виртуализатсия ё хатогиҳо дар системаи оператсионӣ ба назар намегирифт.
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • буридаи :: EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec :: spare_capacity_mut
    • MaybeUnit ::assume_init_drop
    • MaybeUnit ::assume_init_read
    • i8 :: abs_diff
    • i16 :: abs_diff
    • i32 :: abs_diff
    • i64 :: abs_diff
    • i128 :: abs_diff
    • isize :: abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • истифода баред :: abs_diff
    • Намоиш барои io::ErrorKind
    • Аз барои ExitCode
    • На барои! (навиштан "ҳеҷ гоҳ")
    • _Оп_Таъин кунед<$t>
    • arch ::is_aarch64_feature_detected!
  • Сатҳи сеюми дастгирӣ барои платформаҳои mips64-openwrt-linux-musl* ва armv7-unknown-linux-uclibceabi (softfloat) амалӣ карда шудааст. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматикунонидашуда, нашри сохторҳои расмӣ ё тафтиши он, ки оё код сохта мешавад.
  • Компилятор ба истифодаи LLVM 14 иваз карда шудааст.

Илова бар ин, шумо метавонед қайд кунед:

  • Дастгирии иловашуда барои пурбор кардани компилятори rustc бо истифода аз пуштибонии rustc_codegen_gcc, ки ба шумо имкон медиҳад китобхонаи libgccjit-ро аз лоиҳаи GCC ҳамчун генератори код дар rustc истифода баред, ки ба rustc имкон медиҳад, ки дастгирии меъморӣ ва оптимизатсияи дар GCC мавҷудбударо таъмин кунад. Пешбурди Compiler маънои қобилияти истифодаи генератори коди GCC дар асоси GCC дар rustc барои сохтани худи compiler rustc мебошад. Дар паҳлӯи амалӣ, ин хусусият ба шумо имкон медиҳад, ки барномаҳои зангро барои меъморӣ созед, ки қаблан дар rustc дастгирӣ намешуданд.
  • Нашри асбобҳои uutils coreutils 0.0.13 дастрас аст, ки дар доираи он аналоги бастаи GNU Coreutils, ки бо забони Rust аз нав навишта шудааст, таҳия карда мешавад. Coreutils бо зиёда аз сад утилитаҳо меояд, аз ҷумла sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln ва ls. Ҳадафи лоиҳа эҷоди як амали алтернативии кросс-платформаи Coreutils мебошад, ки қодир аст дар платформаҳои Windows, Redox ва Fuchsia кор кунад ва инчунин дар зери иҷозатномаи иҷозатдодашудаи MIT паҳн карда шавад, ба ҷои иҷозатномаи GPL copyleft.

    Версияи нав татбиқи бисёр утилитҳоро беҳтар кардааст, аз ҷумла мутобиқати ба таври назаррас беҳтар шудани утилитаҳои cp, dd, df, split ва tr бо ҳамтоёни худ аз лоиҳаи GNU. Ҳуҷҷатҳои онлайн пешниҳод карда мешаванд. Таҳлилгари clap барои таҳлили аргументҳои сатри фармон истифода мешавад, ки натиҷаро барои парчами "--help" беҳтар кардааст ва дастгирии ихтисороти фармонҳои дарозро илова кардааст (масалан, шумо метавонед "ls -col" ба ҷои "ls -color" -ро муайян кунед ”).

Манбаъ: opennet.ru

Илова Эзоҳ