Rust 1.53 бароварда шуд. Google барои илова кардани дастгирии Rust ба ядрои Linux маблағгузорӣ мекунад

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

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

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

  • Барои массивҳо хусусияти IntoIterator амалӣ карда шудааст, ки ба шумо имкон медиҳад итератсияи элементҳои массивро аз рӯи арзишҳо ташкил кунед: for i in [1, 2, 3] { .. }

    Инчунин мумкин аст, ки массивҳоро ба усулҳое гузаронанд, ки итераторҳоро қабул мекунанд, масалан: let set = BTreeSet::from_iter([1, 2, 3]); барои (а, б) дар some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Пештар, IntoIterator танҳо барои истинодҳои массив татбиқ карда мешуд, яъне. такрор кардани арзишҳои истифодаи истинодҳо ("&[1, 2, 3]") ё "[1, 2, 3].iter()". Татбиқи IntoIterator барои массивҳо бо мушкилоти мутобиқат, ки дар натиҷаи табдили қаблии компилятор аз array.into_iter() ба (&array).into_iter() ба вуҷуд омада буд, монеъ мешуд. Ин мушкилот бо роҳи ҳалли ҳал карда шуданд - компилятор табдил додани array.into_iter() -ро ба (&array).into_iter() идома медиҳад, ки гӯё татбиқи хислати IntoIterator вуҷуд надошта бошад, аммо танҳо ҳангоми даъват кардани усул бо истифода аз ".into_iter() )" синтаксис ва бе ламс кардани зангҳо дар шакли "дар [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".

  • Имконияти муайян кардани ибораҳои "|" (амали мантиқии Ё) дар ягон қисми қолаб, масалан, ба ҷои "Баъзе(1) | Баъзеҳо(2)" шумо ҳоло метавонед "Баъзе(1 | 2)" нависед: натиҷаи мувофиқ { Хуб(Баъзе(1 | 2)) => { .. } Хато(MyError { навъ: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • Истифодаи аломатҳои ғайри ASCII дар идентификаторҳо, аз ҷумла ҳар гуна аломатҳои миллӣ, ки дар мушаххасоти Юникод UAX 31 муайян шудаанд, иҷозат дода мешавад, аммо ба истиснои аломатҳои эмодзи. Агар шумо аломатҳои гуногун, вале шабеҳро истифода баред, компилятор огоҳӣ медиҳад. const BLÅHAJ: &str = "🦈"; struct 人 {名字: Сатр, } бигзор α = 1; letsos = 2; Огоҳӣ: ҷуфти мушаххаскунанда байни 's' ва 's' иштибоҳ ҳисобида мешавад
  • Қисмати нави APIҳо ба категорияи устувор гузаронида шуд, аз ҷумла:
    • массив :: from_ref
    • массив :: from_mut
    • AtomicBool ::fetch_update
    • AtomicPtr ::fetch_update
    • BTreeSet :: нигоҳ доред
    • BTreeMap :: нигоҳ доред
    • BufReader ::seek_relative
    • cmp::min_by
    • cmp :: min_by_key
    • cmp::max_by
    • cmp :: max_by_key
    • DebugStruct ::finish_non_exhaustive
    • Давомнокӣ::ZERO
    • Давомнокӣ::MAX
    • Давомнокӣ::сифр
    • Давомнокӣ ::saturating_add
    • Давомнокӣ::saturating_sub
    • Давомнокӣ::saturating_mul
    • f32 :: is_subnormal
    • f64 :: is_subnormal
    • IntoIterator барои массивҳо
    • {integer}::BITS
    • io :: Хато :: Дастгир карда намешавад
    • NonZero*::leading_seros
    • NonZero * :: паси_сифрҳо
    • Опсия :: ворид кунед
    • Фармоиш ::is_eq
    • Фармоиш ::is_ne
    • Фармоиш ::is_lt
    • Фармоиш ::is_gt
    • Фармоиш ::is_le
    • Фармоиш ::is_ge
    • OsStr ::make_ascii_lowercase
    • OsStr :: make_ascii_uppercase
    • OsStr :: to_ascii_pathcase
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr :: eq_ignore_ascii_case
    • Peekable ::peek_mut
    • Rc::increment_strong_count
    • Rc :: камшавии_кувваи_шумор
    • slice::IterMut ::as_slice
    • AsRef<[T]> барои slice::IterMut
    • impl SliceIndex барои (Банд , Бонд )
    • Vec::exend_from_thin
  • Сатҳи сеюми дастгирӣ барои платформаи wasm64-номаълум-номаълум амалӣ карда шуд. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматикунонидашуда, нашри сохторҳои расмӣ ё тафтиши он, ки оё код сохта мешавад.
  • Менеҷери бастаи боркаш ба таври нобаёнӣ барои истифодаи номи "асосӣ" барои филиали асосии анбори Git (HEAD) интиқол дода шудааст. Вобастагиҳое, ки дар анборҳо ҷойгир шудаанд, ки номи main -ро ба ҷои устод истифода мебаранд, дигар танзим кардани филиал = "маин" -ро талаб намекунанд.
  • Дар компилятор талабот ба версияи ҳадди ақали LLVM ба LLVM 10 боло бурда мешавад.

Илова бар ин, мо метавонем пешниҳоди маблағро барои рушди ҳамгироӣ ба ядрои Linux асбобҳо барои таҳияи ҷузъҳо дар забони Rust қайд кунем. Кор дар доираи лоиҳаи Prossimo таҳти сарпарастии ташкилоти ISRG (Гурӯҳи Тадқиқоти Амнияти Интернет), ки асосгузори лоиҳаи Let's Encrypt мебошад ва HTTPS ва рушди технологияҳоро барои баланд бардоштани амнияти иттилоотӣ мусоидат мекунад, анҷом дода мешавад. Интернет. Маблағро ширкати Google таъмин мекунад, ки маблағи кори Мигел Оҷеда, муаллифи тарҳи Rust-for-Linux-ро пардохт мекунад. Қаблан, ISRG ва Google аллакай эҷоди пуштибонии алтернативии HTTP барои утилитаи curl ва таҳияи модули нави TLS барои сервери http Apache маблағгузорӣ карда буданд.

Мувофиқи маълумоти Microsoft ва Google, тақрибан 70% осебпазириҳо дар натиҷаи коркарди бехатари хотира ба вуҷуд меоянд. Интизор меравад, ки бо истифода аз забони Rust барои таҳияи ҷузъҳои ядроӣ, аз қабили драйверҳои дастгоҳ, хатари осебпазириро, ки дар натиҷаи коркарди хотираи хатарнок ба вуҷуд омадаанд, коҳиш медиҳад ва хатогиҳоро, аз қабили дастрасӣ ба минтақаи хотира пас аз озод шудан ва фаромадани ҳудуди буфериро аз байн мебарад.

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

Манбаъ: opennet.ru

Илова Эзоҳ