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`.
 
 
>>> Подробности






