Выпуск языка программирования Rust 1.50

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
12-Фев-2021 20:30

Опубликован релиз языка системного программирования Rust 1.50, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Автоматическое управление памятью в Rust избавляет разработчика от ошибок при манипулировании указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Основные новшества:
  • Продолжена работа по стабилизации константных дженериков ("const generics"), которые теперь могут применяться для индексации массивов не только через оператор "[]", но и при помощи типажей ops::Index и IndexMut (добавлены реализации ops::Index и IndexMut для массивов "[T; N]" с любым размером const N).
    fn second<C>(container: &C) -> &C::Output
       where
           C: std::ops::Index<usize> + ?Sized,
       {
           &container[1]
       }
       fn main() {
           let array: [i32; 3] = [1, 2, 3];
           assert_eq!(second(&array[..]), &2); // slices worked before
           assert_eq!(second(&array), &2); // now it also works directly
       }
  • Стабилизировано применение любых const-значений при определении массивов с использованием синтаксиса "[x; N]". Ранее при числе повторов "N" больше единицы const-выражения в значении "x" разрешалось использовать только для типажа Copy. Теперь это ограничение снято.
    fn main() {
          const NONE: Option<Vec<i32>> = None;
          const EMPTY: Option<Vec<i32>> = Some(Vec::new());
          let nones = [NONE; 10];
          let empties = [EMPTY; 10];
      }
  • Разрешено безопасное назначение полей ManuallyDrop<T> в объединениях (union). Ранее, в режиме safe могли использоваться только типажи Copy, так как имеется неопределённость по поводу того, какой вариант остаётся действительным после применения Drop. ManuallyDrop<T> не требует Drop, поэтому назначение данных полей можно считать безопасным.
  • Для типа File на Unix-системах реализована поддержка нишевого значения (niche) "-1", которое кодирует ошибку при работе с файловым дескриптором. Под нишевым значением подразумевается особое значение, которое может влиять на оптимизацию размещения типа в памяти, но является недопустимым для типа (например, нишевым является значение 0 для типов NonZero). Структура File в окружениях Unix определяет файловый дескриптор, который не может быть отрицательным, но, при этом системные вызовы могут возвращать в дескрипторе значения "-1", сигнализирующие об ошибке операции. Добавление нишевого значения позволило сделать размер Option<File> идентичным размеру File.
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы методы:
  • Признак "const", определяющий возможность использования в любом контексте вместо констант, применён в методах
  • IpAddr::is_ipv6
  • Layout::size
  • Layout::align
  • Layout::from_size_align
  • pow для всех целых типов.
  • checked_pow для всех целых типов.
  • saturating_pow для всех целых типов.
  • wrapping_pow для всех целых типов.
  • next_power_of_two для всех беззнаковых целых типов.
  • checked_power_of_two для всех беззнаковых целых типов.
  • Изменения в пакетном менеджере cargo:
    • В команде "update" реализована опция "--workspace", позволяющая ограничить обновление только членами выбранного рабочего пространства, не трогая их зависимости.
    • В метаданные добавлено новое поле "doc" для определения того, что цель документирована.
    • Запрещено применение git-зависимостей, в которых указано более одной ветки, тега или ревизии.
    • Для загруженных в реестр crate-файлов реализована сборка с повторяемыми (reproducible) настройками, которые остаются неизменными для разных типов систем.
  • Профиль  ЛС 
    Показать сообщения:     

    Вы не можете начинать темы
    Вы не можете отвечать на сообщения
    Вы не можете редактировать свои сообщения
    Вы не можете удалять свои сообщения
    Вы не можете голосовать в опросах
    Вы не можете прикреплять файлы к сообщениям
    Вы не можете скачивать файлы

    Текущее время: 23-Ноя 01:09
    Часовой пояс: UTC + 5