רוסט 1.77 פּראָגראַממינג שפּראַך מעלדונג

די מעלדונג פון דער גענעראַל-צוועק פּראָגראַממינג שפּראַך Rust 1.77, געגרינדעט דורך די מאָזיללאַ פּרויעקט, אָבער איצט דעוועלאָפּעד אונטער די אָוספּיסיז פון די פרייַ נאַן-נוץ אָרגאַניזאַציע Rust Foundation, איז ארויס. די שפּראַך איז פאָוקיסט אויף זיקאָרן זיכערקייַט און גיט די מיטל צו דערגרייכן הויך פּאַראַלעליזאַם אין אַרבעט דורכפירונג, און ויסמיידן די נוצן פון אַ מיסט קאַלעקטער און רונטימע (רונטימע איז רידוסט צו יקערדיק יניטיאַליזיישאַן און וישאַלט פון די נאָרמאַל ביבליאָטעק).

ראַסט ס זכּרון פאַרוואַלטונג טעקניקס באַפרייַען די דעוועלאָפּער פון טייַטל מאַניפּיאַליישאַן ערראָרס און באַשיצן קעגן פּראָבלעמס וואָס שטייען פֿון נידעריק-מדרגה זכּרון מאַניפּיאַליישאַן, אַזאַ ווי נאָך-פריי אַקסעס, נאַל טייַטל דיפעראַנסיז, באַפער אָוווערראַנז, און די ווי. צו פאַרשפּרייטן לייברעריז, ענשור פֿאַרזאַמלונג און פירן דיפּענדאַנסיז, די פּרויעקט איז דעוועלאָפּינג די קאַרגאָ פּעקל פאַרוואַלטער. די crates.io ריפּאַזאַטאָרי איז געשטיצט פֿאַר האָסטינג לייברעריז.

זיקאָרן זיכערקייַט איז ענפאָרסט אין רוסט אין די קאַמפּיילינג צייט דורך רעפֿערענץ קאָנטראָלירונג, אָבדזשעקט אָונערשיפּ טראַקינג, אַבדזשעקט לעבן (סקאָפּינג) באַטראַכטונג, און זכּרון אַקסעס אפשאצונג ביי רונטימע. זשאַווער אויך פּראָווידעס שוץ קעגן ינטאַדזשער אָוווערפלאָוז, ריקווייערז אַז די וועריאַבאַל וואַלועס זענען יניטיאַלייזד איידער נוצן, האט בעסער טעות האַנדלינג אין דער נאָרמאַל ביבליאָטעק, ניצט דעם באַגריף פון ימפּיואַטאַבאַל באַווייַזן און וועריאַבאַלז דורך פעליקייַט, און אָפפערס שטאַרק סטאַטיק טייפּינג צו מינאַמייז לאַדזשיקאַל ערראָרס.

הויפּט חידושים:

  • Добавлена поддержка литералов для Си-строк (c»текст»), которые хранятся в памяти с завершающим нулевым символом и ассоциированы с типом «CStr». Предполагается, что поддержка Си-строк упростит написание кода, взаимодействующего с прослойками на языках программирования, в которых применяются завершаемые нулевым байтом строки, и позволит выполнять необходимые проверки на стадии компиляции. const HELLO: &core::ffi::CStr = c»Hello, world!»;
  • В асинхронно выполняемых функциях, объявленных при помощи выражения «async fn», разрешено использование рекурсии, т.е. подобные функции теперь могут вызывать сами себя. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await } }
  • Стабилизирован макрос offset_of!, позволяющий определить байтовое смещение полей структур, перечислений, объединений и кортежей, относительно начала типа. На практике макрос может быть полезен в ситуациях, когда требуется работа на уровне смещения полей при отсутствии экземпляра типа. В частности, функциональность offset_of необходима при разработке низкоуровневых компонентов, таких как драйверы. use std::mem; #[repr(C)] struct FieldStruct { first: u8, second: u16, third: u8 } assert_eq!(mem::offset_of!(FieldStruct, first), 0); assert_eq!(mem::offset_of!(FieldStruct, second), 2); assert_eq!(mem::offset_of!(FieldStruct, third), 4);
  • В пакетном менеджере Cargo в профилях релизов по умолчанию включена очистка файлов от отладочных данных (strip = «debuginfo»), если в профиле Cargo явно не включён режим отладки, т.е. если параметр debug = 0.
  • Включена по умолчанию опция «-Zthir-unsafeck=on», обеспечивающая проверку unsafe для промежуточного представления THIR («Typed High-Level Intermediate Representation»).
  • Добавлена lint-проверка static_mut_refs для вывода предупреждения при использовании ссылок на изменяемые статические значения.
  • Реализована возможность применения типажа «From<&[T; N]>» для типа «Cow<[T]>». fn foo(data: impl Into<Cow<‘static, [&’static str]>>) { /* … */ } fn main() { foo(&[«hello», «world»]); }
  • В компиляторе обеспечено выравнивание 16-байтовых типов i128 и u128 для систем x86.
  • א נייַע טייל פון די API איז אריבערגעפארן צו דער קאַטעגאָריע פון ​​סטאַביל, אַרייַנגערעכנט די מעטהאָדס און ימפּלאַמאַנץ פון טרייץ זענען סטייבאַלייזד:
    • array::each_ref
    • array::each_mut
    • core::net
    • f32::round_ties_even
    • f64::round_ties_even
    • mem::offset_of!
    • slice::first_chunk
    • slice::first_chunk_mut
    • slice::split_first_chunk
    • slice::split_first_chunk_mut
    • slice::last_chunk
    • slice::last_chunk_mut
    • slice::split_last_chunk
    • slice::split_last_chunk_mut
    • slice::chunk_by
    • slice::chunk_by_mut
    • Bound::map
    • File::create_new
    • Mutex::clear_poison
    • RwLock::clear_poison
  • Реализован третий уровень поддержки для платформ aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf и riscv32im-risc0-zkvm-elf. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

מקור: opennet.ru

לייגן אַ באַמערקונג