The OpenNET Project / Index page

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



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

Исходное сообщение
"Релиз языка программирования Rust 1.30"
Отправлено opennews, 26-Окт-18 11:14 
Состоялся (https://blog.rust-lang.org/2018/10/25/Rust-1.30.0.html) релиз языка системного программирования Rust 1.30 (http://www.rust-lang.org), развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.

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


В подготовке нового выпуска приняли участие 178 разработчиков. Основные новшества (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve...):


-  Добавлена поддержка двух новых видов процедурных макросов (https://doc.rust-lang.org/book/procedural-macros.html): макросы похожие на атрибуты и макросы похожие на функции. Атрибутоподобные макросы напоминают ранее доступные произвольные макросы на базе механизма "derive", но кроме генерации кода только для атрибута "#[derive]" позволяют создавать собственные произвольные атрибуты, а также не ограничены работой только со структурами и перечислениями (enums). Макросы похожие на функции дают возможность определить макрос в форме вызова функции (например, "let sql = sql!(SELECT * FROM posts WHERE id=1);").

-  Добавлена (https://github.com/rust-lang/rust/pull/50911/) возможность выноса макроса в текущую область видимости (scope) по аналогии  функциями при помощи ключевого слова "use", без использования специальной аннотации "#[macro_use]";

-  Стабилизирован пакет (crate) proc_macro, предоставляющий API для упрощения создания макросов. В proc_macro также значительно расширен API для обработки ошибок, который уже задействован в пакетах подобных syn и quote;

-  Началась работа по упрощению системы создания модулей. Добавлена возможность использования ключевого слова "crate" в пути для отсылки к корню иерархии модулей, например, "crate::foo" ссылается на модуль "foo", размещённый в "src/lib.rs". При использовании внешних пакетов отныне не требуется указание префикса "::", например, вместо  "json = ::serde_json::from_str(foo);" теперь можно писать "let json = serde_json::from_str(foo);". Логика разбора пути "a::b::c" выглядит следующим образом: если  "a" является именем пакета, то в этом пакете осуществляется поиск "b::c"; если в "a" указано ключевое слово "crate", то поиск "b::c" осуществляется относительно корня иерархии модулей; иначе
"a::b::c" извлекается из текущей позиции в иерархии модулей;

-  Добавлена возможность использования ключевых слов в качестве идентификаторов. Например, для создания локальной переменной с именем "for" можно указать "let r#for = true;", а для создания функции с именем "for" - "fn r#for() {". При вызове подобной функции следует использовать признак raw-идентификатора - "r#for();";

-  Добавлен атрибут "#[panic_handler]", предоставляющий возможность определения функции для обработки сбоев (panic) в Rust runtime. Подобное может оказаться полезным для сборки приложения без стандартной библиотеки, используя режим no_std;

-  Реализована возможность определения  в макросах видимости ключевых слов, таких как "pub", используя спецификатор "vis";

-  Стабилизированы атрибуты для инструментов Rust (https://github.com/rust-lang/rust/pull/53459/), таких как  rustfmt и clippy. Например,  "#[rustfmt::skip]" может применяться отключения форматирования следующего элемента;

-  В разряд стабильных переведена новая порция API, в том числе

    Ipv4Addr::{BROADCAST, LOCALHOST, UNSPECIFIED},  Ipv6Addr::{BROADCAST, LOCALHOST, UNSPECIFIED}, Iterator::find_map;

-  Из-за неверной трактовки в функциях "trim_*" понятий "лево" и "право" для  RTL-языков, данные функции переименованы:  trim_left в trim_start, trim_right в trim_end, trim_left_matches в trim_start_matches,   trim_right_matches  в trim_end_matches;

-  В пакетный менеджер Cargo добавлен индикатор прогресса выполнения операций.


URL: https://blog.rust-lang.org/2018/10/25/Rust-1.30.0.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=49503

 

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



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

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