The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.36"
Отправлено opennews, 05-Июл-19 09:52 
Опубликован (https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html) релиз языка системного программирования Rust 1.36 (http://www.rust-lang.org), развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.

Автоматическое управление памятью в Rust избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo (http://blog.rust-lang.org/2014/11/20/Cargo.html), позволяющий получить нужные для программы библиотеки  в один клик. Для размещения библиотек поддерживается репозиторий crates.io (https://crates.io/).


Основные новшества (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve...):


-  Стабилизирован типаж (trait) Future (https://doc.rust-lang.org/std/future/trait.Future.html), который представляет значение, вычисление которого возможно ещё не завершено в процессе использования блоков async / .await. Определяемые при помощи Future асинхронные значения дают возможность продолжить выполнение в потоке полезной работы, попутно ожидая завершения вычислений определённого значения;

-  Стабилизирована библиотека alloc (https://doc.rust-lang.org/alloc/index.html), предоставляющая умные указатели и коллекции для управления размещаемыми в памяти значениями. Для выделения памяти в std теперь применяется тип Vec (https://doc.rust-lang.org/alloc/vec/index.html), который реэкспортируются из alloc. Отдельное использование alloc имеет смысл в приложениях не привязанных к std ("#![no_std]"), а также в библиотеках, рассчитанных на применение в подобных программах без std;

-  Для обхода проверок корректной инициализации значений предложен (https://gankro.github.io/blah/initialize-me-maybe/) промежуточный тип MaybeUninit (https://doc.rust-lang.org/std/mem/union.MaybeUninit.html), который можно использовать вместо функции mem::uninitialized, в качестве её более безопасной альтернативы. Функция mem::uninitialized удобна для быстрого создания массивов, но  вводит компилятор в заблуждение, так как создаёт видимость выполнения инициализации, но в действительности значение остаётся неинициализированным. MaybeUninit позволяет явно указать компилятору, что значение неинициализировано, учесть связанное с этим возможное неопределённое поведение, а также в программах организовать проверку через "maybe_t:" и поэтапную инициализацию с пометкой её завершения при помощи вызова ".assume_init()". С появлением MaybeUninit функция mem::uninitialized переведена в разряд устаревших и не рекомендована к использованию;

-  Техника NLL (Non-Lexical Lifetimes), расширившая систему учёта времени жизни заимствованных переменных, стабилизирована для языка Rust 2015 (изначально NLL поддерживался только Rust 2018).  Вместо привязки времени жизни на лексическом уровне, NLL осуществляет учёт на уровне набора указателей в графе потока выполнения. Подобный подход позволяет увеличить качество проверки заимствования переменных (borrow checker) и допустить выполнение некоторых видов корректного кода, использование которого ранее приводило к выводу ошибки. Новое поведение также существенно упрощает отладку;

-  В библиотеке hashbrown добавлена и применена по умолчанию новая реализация ассоциативных массивов HashMap (https://doc.rust-lang.org/std/collections/struct.HashMap.html), основанная на применении структуры Swiss Table (https://abseil.io/blog/20180927-swisstables) (в библиотеке std по-прежнему по умолчанию предлагается реализация на основе SipHash 1-3). Программный интерфейс остался прежним, а заметные разработчику отличия сводятся к увеличению производительности и снижению потребления памяти;

-  В пакетный менеджер cargo добавлена (https://www.ncameron.org/blog/cargo-offline/) опция "--offline", включающая режим работы без обращения по сети, при котором при установке зависимостей используются только прокэшированные на локальной системе пакеты. Если зависимость отсутствует в локальном кэше, то будет выведена ошибка. Для предварительной загрузки зависимостей в локальный кэш перед переходом в offline можно использовать команду "cargo fetch";


-  Реализована возможность вызова макроса "dbg!" с указанием нескольких аргументов;

-  Признак "const", определяющий возможность использования в любом контексте вместо констант, применён для методов
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::dangling и
    NonNull::cast;

-  В разряд стабильных переведена новая порция API, в том числе стабилизированы методы
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (для строк) и    str::as_mut_ptr.


URL: https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=51034

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру