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

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

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

הויפּט ינאָווויישאַנז:

  • Стабилизирован типаж (trait) צוקונפט, который представляет значение, вычисление которого возможно ещё не завершено в процессе использования блоков async / .await. Определяемые при помощи Future асинхронные значения дают возможность продолжить выполнение в потоке полезной работы, попутно ожидая завершения вычислений определённого значения;
  • Стабилизирована библиотека alloc, предоставляющая умные указатели и коллекции для управления размещаемыми в памяти значениями. Для выделения памяти в std теперь применяется тип Vec, который реэкспортируются из alloc. Отдельное использование alloc имеет смысл в приложениях не привязанных к std («#![no_std]»), а также в библиотеках, рассчитанных на применение в подобных программах без std;
  • Для обхода проверок корректной инициализации значений פאָרשלאָגן промежуточный тип MaybeUnit, который можно использовать вместо функции mem::uninitialized, в качестве её более безопасной альтернативы. Функция mem::uninitialized удобна для быстрого создания массивов, но вводит компилятор в заблуждение, так как создаёт видимость выполнения инициализации, но в действительности значение остаётся неинициализированным. MaybeUninit позволяет явно указать компилятору, что значение неинициализировано, учесть связанное с этим возможное неопределённое поведение, а также в программах организовать проверку через «maybe_t:» и поэтапную инициализацию с пометкой её завершения при помощи вызова «.assume_init()». С появлением MaybeUninit функция mem::uninitialized переведена в разряд устаревших и не рекомендована к использованию;
  • Техника NLL (Non-Lexical Lifetimes), расширившая систему учёта времени жизни заимствованных переменных, стабилизирована для языка Rust 2015 (изначально NLL поддерживался только Rust 2018). Вместо привязки времени жизни на лексическом уровне, NLL осуществляет учёт на уровне набора указателей в графе потока выполнения. Подобный подход позволяет увеличить качество проверки заимствования переменных (borrow checker) и допустить выполнение некоторых видов корректного кода, использование которого ранее приводило к выводу ошибки. Новое поведение также существенно упрощает отладку;
  • Включена новая реализация ассоциативных массивов האַשמאַפּ, основанная на применении структуры Swiss Table (автоматически загружается hashbrown::HashMap, если явно не указано иное, например, std::HashMap, который основан на SipHash 1-3). Программный интерфейс остался прежним, а заметные разработчику отличия сводятся к увеличению производительности и снижению потребления памяти;
  • В пакетный менеджер cargo צוגעגעבן опция «—offline», включающая режим работы без обращения по сети, при котором при установке зависимостей используются только прокэшированные в локальной системе пакеты. Если зависимость отсутствует в локальном кэше, то будет выведена ошибка. Для предварительной загрузки зависимостей в локальный кэш перед переходом в offline можно использовать команду «cargo fetch»;
  • Реализована возможность вызова макроса «dbg!» с указанием нескольких аргументов;
  • Признак «const», определяющий возможность использования в любом контексте вместо констант, применён для методов
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::dangling и
    NonNull::cast;

  • א נייַע טייל פון אַפּיס איז טראַנספערד צו די סטאַביל קאַטעגאָריע, אַרייַנגערעכנט מעטהאָדס וואָס זענען סטייבאַלייזד
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (для строк) и str::as_mut_ptr.

מקור: opennet.ru

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