3 июля было объявлено о выходе очередной версии Rust — языка программирования, разрабатываемого Mozilla. Новая версия включает в себя около 2000 изменений и исправлений ошибок.
Основные изменения:
- Изменения в языке:
- квалификатор видимости больше неприменим к 'impl', только к методам;
- переписан borrow checker, исправлено множество ошибок;
- параметр 'self' больше не равен неявно `&'self self` и для него может быть явно определено время жизни;
- перегружаемые составные операторы ('+=' и пр.) были временно удалены из-за ошибок;
- циклы 'for' теперь требуют 'for'-итераторов, чтобы вернуть 'bool';
- 'Durable' trait был заменен `'static`;
- структуры с атрибутом '#[packed]' выравниваются по байтовой границе;
- параметры типов, привязываемые посредством 'Copy', должны быть явно скопированы с ключевым словом 'copy';
- 'Option<~T>' сейчас представляется как nullable-указатель;
- '@mut' делает динамические borrow checks корректно;
- функция main теперь ищется только на верхнем уровне. Атрибут '#[main]' валиден в любом месте;
- поля структур больше не могут быть мутабельными, вместо этого используется унаследованная мутабельность;
- удалены атрибуты '#[no_send]', '#[no_freeze]';
- неограниченная рекурсия прерывается при достижении лимита, определенного переменной окружения 'RUST_MAX_STACK' (1gb по умолчанию);
- удален режим 'vecs_implicitly_copyable', векторы никогда не копируются неявно;
- атрибут '#[static_assert]' выдает assert'ы о статических булевых переменных во время компиляции;
- 'argument modes' больше не существует;
- редко используемая инструкция `use mod` удалена.
- Расширения синтаксиса:
- 'fail!' и 'assert!' принимают списки аргументов '~str', '&'static str' или 'fmt!';
- `Encodable`, `Decodable`, `Ord`, `TotalOrd`, `TotalEq`, `DeepClone`, `Rand`, `Zero` и `ToStr` могут быть автоматически выведены посредством директивы `#[deriving(...)]`;
- макрос `bytes!` возвращает вектор байтов для string, u8, char и численных литералов.
- Библиотеки:
- `core` crate был переименован в `std`;
- `std` crate был переименован в `extra`;
- расширена и улучшена документация;
- добавлен модуль std: `iterator` для внешних итераторов (external iterator objects);
- std: многие итераторы, написанные в старом стиле, были заменены на реализацию 'Iterator';
- std: многие внутренние векторы и строковые итераторы (включая 'any', 'all и пр.) удалены;
- std: prelude теперь не реэкспортирует любые модули, только типы и трейты;
- std: дополнения в Prelude: `print`, `println`, `FromStr`, `ApproxEq`, `Equiv`, `Iterator`, `IteratorUtil`.
>>> Подробности