[Перевод] Rust 1.0: текущее состояние и окончательное расписание выхода версий

Rust logoПрошло пять недель с тех пор как вышла альфа версия Rust 1.0! До того как выйдет следующая предварительная версия Rust, мы хотели бы рассказать о текущем состоянии языка и о том, что мы еще намерены сделать по пути к стабильной версии 1.0.TL; DR: Rust 1.0 выйдет 15 мая 2015 года

Расписание выхода версийИсходя из прогресса, которого мы добились во время жизни первой альфы, мы составили точное расписание выхода новых версий до 1.0: Rust 1.0-alpha2 — 20 февраля Все модули из 1.0 будут помечены стабильными в ночных сборках — примерно 9 марта Rust 1.0-beta — 31 марта Rust 1.0 — 15 мая Это расписание отличается от предыдущего тем, что мы закрепили определенный набор циклов разработки. Также новое расписание предусматривает вторую альфа-версию и только одну бета-версию.Главная причина, по которой следующий релиз будет называться alpha2, а не beta1, это то, что мы только что утвердили новые модули path и IO, и хотели бы собрать побольше реакции сообщества, прежде чем объявлять их стабильными.

Что нового в alpha2 У нас получилось утвердить и реализовать почти все фичи, которые были запланированы на этот цикл разработки.Самое важное — пересмотр API всех основных подсистем завершен: проведена реформа модулей path и IO. Сейчас все модули, которые мы хотим включить в 1.0, приняли свою окончательную форму (хотя возможны мелкие правки во время цикла alpha2).

Остальные изменения и улучшения:

Замыкания: Rust теперь поддерживает замыкания с полным захвтом, а временная |:| нотация была объявлена deprecated. Деструкторы: Утверждены новые правила деструкторов, устраняя необходимость использования конструкции #[unsafe destructor]. Реформа path: Модуль path был спроектирован с нуля, чтобы устранить множество проблем с семантикой и удобством использования и чтобы использовать преимущества типов с динамическим размером (DST). Реформа IO: Подсистема io была тщательно пересмотрена чтобы улучшить стабильность, кроссплатформенное поведение и избежать претенциозных высокоуровневых абстракций над системой. Несмотря на то, что почти все API было затронуто этими изменениями, они были сделаны по направлению к намного более консервативному и последовательному дизайну. Приведения через разыменование (deref coercions): Новое неявное приведение типов затрагивает в основном умные указатели. С помощью него вы сможете передавать &Vec там, где требуется &[T], или &Arc там, где требуется &T. Эти приведения помогают избавиться от явного разыменования и ужасного «перезаимствования» &* и в целом означают, что теперь вы можете думать о & как об общем операторе заимствования (borrow operator). Различные стадии стабильности фич: Теперь в Rust есть система именования фич API, похожая на то, как мы работали с фичами языка. Это новоое понятие поможет нам управлять прогрессом стандартной библиотеки и сделает более ясным процесс определения минимальной версии Rust, необходимой для крейта (crate, аналог пакета или библиотеки в экосистеме Rust — прим. пер.). Циклы for: Для более удобных циклов for введен новый трейт IntoIterator. Теперь можно писать for x in &vec, вместо for x in vec.iter (). Диапазоны: Мы утвердили нотацию диапазонов, добавлена конструкция … для полных диапазонов, что делает возможным в будущем использование API вроде collection.remove (…). Трейты: Были утверждены новые правила согласованности, что позволяет достичь одновременно большей гибкости и обоснованности для реализаций трейтов. Семантика переполнения: После долгих споров, была утверждена (будет реализована в alpha2) семантика целочисленного переполнения. Она призвана значительно упростить поиск багов переполнения, особенно при использовании совместно с fuzzing-методикой. Ассоциированные (associated) типы: Было исправлено множество багов со связанными типами в компиляторе, теперь их можно использовать повсеместно. Еще несколько изменений на момент написания статьи не утверждены, но, скорее всего, войдут в alpha2: ковариантность и контравариантность типов, изменения в трейте Send и изменения в стандартной библиотеке после реформы целочисленных типов в alpha1.Детали будут описаны в заметках к релизу на следующей неделе.

Почему еще одна альфа? Главная причина — мы хотим оставить те API, которые мы недавно утвердили (например IO и path), помеченными нестабильными на несколько недель, чтобы успеть получить обратную связь. В бете мы собираемся вообще запретить использование нестабильных частей Rust.Более подробно, этим релизом подчеркивается разница между альфа- и бета-версиями, связанная с нашей системой стабильности. В альфа релизах можно включить использование нестабильных фичей, но после выхода беты это будет возможно только при использовании ночных сборок. Релиз бета-версии станет той точкой, когда значительная часть сообщества сможет уйти от использования ночных сборок.

Как было сказано выше, мы утвердили все API, необходимые для выпуска 1.0, включая path и IO. Однако, некоторые изменения были приняты только в конце цикла и у сообщества нет достаточного опыта работы с изменными API, чтобы пометить их стабильными. Изменения в API, за исключением нескольких, очень консервативны: все они были сделаны по подобию существующих успешных библиотек.

После выхода alpha2 откроется длинное окно для внесения изменений в API, прежде чем они будет объявлены стабильными. Окно закроется примерно 9 марта.

Если ли риск пробуксовки из-за того, что сейчас вышла альфа, а не бета? Навряд ли. Все фичи языка и стандартной библиотеки, необходимые для выпуска 1.0, утверждены. Это означает, что у нас есть 12 недель, чтобы отполировать все и спокойно перейти от alpha2 к стабильной 1.0.Что еще случится до выхода 1.0? Все фичи 1.0 уже утверждены. Остается только шлифовать, улучшать производительность и документацию, исправлять баги и набираться достаточной уверенности в новых API, чтобы можны было присвоить им метку #[stable].Релиз alpha2 пометит deprecated (но оставит доступными) старые модули path и IO. Новые модули должны стать стабильными к 9 марта. Пожалуйста, пробуйте новые API и помогите нам выявить выявить возможные проблемы!

После дедлайна 9 марта для значительной части крейтов станет возможным работать только со «стабильным Rust», то есть без единого использования частей Rust, помеченных #[feature]. После дедлайна, и до выхода бета-версии 1.0, мы намерены работать напрямую с авторами пакетов для crates.io, чтобы помочь перевести их код на стабильный Rust и выявить все пробелы в стабилизации языка.

Мы надеемся, что к моменту выхода беты значительная часть экосистемы перейдет с ночных сборок на стабильные релизы. Чтобы достичь этого, нужно чтобы все сообщество стало двигаться в направлении стабилизации, которую мы координируем с помощью discuss. Если вы еще не включились в этот процесс, пожалуйста зайдите туда и расскажите какие ключевые нестабильные API вы используете.

© Habrahabr.ru