Rust 0.9

Сегодня было объявлено о выходе очередной версии Rust — языка программирования, разрабатываемого Mozilla.

Основные изменения:

Язык: удален тип float, для чисел с плавающей точкой используются типы f32, f64; добавлена возможность включения экспериментальных фич (feature gating) на уровне crate’ов (атрибут '#[feature (foo)]'); managed boxes (@) теперь включаются с помощью атрибута '#[feature (managed_boxes)]' и в будущем будут удалены. Вместо них используются типы Gc и Rc; '@mut' удален, вместо него используется тип 'std: cell::{Cell, RefCell}'; для возврата в начало цикла используется ключевое слово 'continue' вместо 'loop'; запрещено изменение строк через индексацию; новый синтаксис для создания raw-строк ('r«foo»'). Также можно создать raw-строку с помощью совпадающих хэш-разделителей 'r###«foo»###'; тип '~fn' теперь пишется как 'proc (args) → retval { … }' и может вызываться только однажды; тип '&fn' теперь пишется как '|args| → ret'; тип '@fn' удален; ключевое слово 'do' теперь работает только с procs-лямбдами; одноэлементные tuple-like структуры больше не могут быть разыменованы для получения внутреннего значения. Более полное решение для перегрузки оператора разыменования будет предоставлено в будущем; атрибут '#[link (…)]' был заменен атрибутом '#[crate_id = «name#vers»]'; пустые реализации (impl) должны прерываться пустыми фигурными скобками, использование ';' для этого запрещено; ключевые слова больше не могут использоваться как lifetime-имена, 'self'-lifetime больше не имеет особого смысла; удален макрос 'fmt!'; удалены макросы 'printf!' и 'printfln!', вместо них используются 'print!' и 'println!'; pattern matching поддерживает 'mut' ('let (mut x, y) = (1, 2);' вместо синтаксиса 'extern mod foo (name = «bar»)' теперь следует использовать 'extern mod foo = «bar»'; новые зарезервированные слова 'alignof', 'offsetof', 'sizeof'; макросы могут иметь атрибуты; макрос 'asm!' теперь включается feature-gated атрибутом '#[feature (asm)]'; комментарии могут быть вложенными; значения неявно преобразуются к типам trait’ов которые они реализуют (раньше необходимо было явно использовать 'as'); Библиотеки: std: API для 'option' и 'result' был переработан для того чтобы сделать его более простым, консистентным и композабельным; std: Полностью заменен модуль 'std: io', включая планировщик. Полностью реализованы File, TCP, UDP, Unix сокеты, именованные каналы и таймеры; std: в модуль 'io: util' добавлены полезные реализации типов 'Reader' и 'Writer', включая 'NullReader', 'NullWriter', 'ZeroReader', 'TeeReader'; std: Тип 'extra: rc' перемещен в std; std: Тип 'Gc' в модуле 'gc' заменит тип '@'; std: Удален тип 'Either'; std: 'fmt: Default' может быть реализован для любого типа с помощью синтаксиса 'format!(»{}», myfoo)'; Инструментарий: команды 'rust' и 'rusti' были удалены из-за отсутствия поддержки; 'rustdoc' был полностью переписан; 'rustdoc' может тестировать примеры кода из документации; 'rustpkg' может тестировать пакеты с аргументом 'test'; 'rustpkg' поддерживает произвольные зависимости, включая библиотеки на C; улучшен механизм генерации отладочной информации в 'rustc'; улучшены сообщения об ошибках для несбалансированных разделителей в 'rustc'; удалена поддержка JIT в 'rustc'; исполнимые файлы и статические библиотеки могут быть собраны с LTO (ключ '-Z lto'); в 'rustc' добавлен флаг '--dep-info' для вывода сообщения зависимостей инструментам сборки.Детальный обзор изменений с примерами

  mozilla, rust

©  Linux.org.ru