- PVSM.RU - https://www.pvsm.ru -

Прошло пять недель с тех пор как вышла альфа версия Rust 1.0! До того как выйдет следующая предварительная версия Rust, мы хотели бы рассказать о текущем состоянии языка и о том, что мы еще намерены сделать по пути к стабильной версии 1.0.
TL;DR: Rust 1.0 выйдет 15 мая 2015 года
Исходя из прогресса, которого мы добились во время жизни первой альфы, мы составили точное расписание выхода новых версий до 1.0:
Это расписание отличается от предыдущего [1] тем, что мы закрепили определенный набор циклов разработки. Также новое расписание предусматривает вторую альфа-версию и только одну бета-версию.
Главная причина, по которой следующий релиз будет называться alpha2, а не beta1, это то, что мы только что утвердили новые модули path и IO, и хотели бы собрать побольше реакции сообщества, прежде чем объявлять их стабильными.
У нас получилось утвердить и реализовать почти все фичи, которые были запланированы [2] на этот цикл разработки.
Самое важное – пересмотр API всех основных подсистем завершен: проведена реформа модулей path и IO. Сейчас все модули, которые мы хотим включить в 1.0, приняли свою окончательную форму (хотя возможны мелкие правки во время цикла alpha2).
Остальные изменения и улучшения:
|:| нотация была объявлена deprecated.#[unsafe destructor].path был спроектирован [5] с нуля, чтобы устранить множество проблем с семантикой и удобством использования и чтобы использовать преимущества типов с динамическим размером (DST).io была тщательно пересмотрена [6] чтобы улучшить стабильность, кроссплатформенное поведение и избежать претенциозных высокоуровневых абстракций над системой. Несмотря на то, что почти все API было затронуто этими изменениями, они были сделаны по направлению к намного более консервативному и последовательному дизайну.&Vec<T> там, где требуется &[T], или &Arc<T> там, где требуется &T. Эти приведения помогают избавиться от явного разыменования и ужасного "перезаимствования" &* и в целом означают, что теперь вы можете думать о & как об общем операторе заимствования (borrow operator).
IntoIterator. Теперь можно писать for x in &vec, вместо for x in vec.iter()... для полных диапазонов, что делает возможным в будущем использование API вроде collection.remove(..).Еще несколько изменений на момент написания статьи не утверждены, но, скорее всего, войдут в alpha2: ковариантность и контравариантность типов [12], изменения в трейте Send [13] и изменения в стандартной библиотеке после реформы целочисленных типов в alpha1 [14].
Детали будут описаны в заметках к релизу на следующей неделе.
Главная причина – мы хотим оставить те API, которые мы недавно утвердили (например IO и path), помеченными нестабильными на несколько недель, чтобы успеть получить обратную связь. В бете мы собираемся вообще запретить использование нестабильных частей Rust.
Более подробно, этим релизом подчеркивается разница между альфа- и бета-версиями [1], связанная с нашей системой стабильности [15]. В альфа релизах можно включить использование нестабильных фичей, но после выхода беты это будет возможно только при использовании ночных сборок. Релиз бета-версии станет той точкой, когда значительная часть сообщества сможет уйти от использования ночных сборок.
Как было сказано выше, мы утвердили все API, необходимые для выпуска 1.0, включая path и IO. Однако, некоторые изменения были приняты только в конце цикла и у сообщества нет достаточного опыта работы с изменными API, чтобы пометить их стабильными. Изменения в API, за исключением нескольких, очень консервативны: все они были сделаны по подобию существующих успешных библиотек.
После выхода alpha2 откроется длинное окно для внесения изменений в API, прежде чем они будет объявлены стабильными. Окно закроется примерно 9 марта.
Навряд ли. Все фичи языка и стандартной библиотеки, необходимые для выпуска 1.0, утверждены. Это означает, что у нас есть 12 недель, чтобы отполировать все и спокойно перейти от alpha2 к стабильной 1.0.
Все фичи 1.0 уже утверждены. Остается только шлифовать, улучшать производительность и документацию, исправлять баги и набираться достаточной уверенности в новых API, чтобы можны было присвоить им метку #[stable].
Релиз alpha2 пометит deprecated (но оставит доступными) старые модули path и IO. Новые модули должны стать стабильными к 9 марта. Пожалуйста, пробуйте новые API и помогите нам выявить выявить возможные проблемы!
После дедлайна 9 марта для значительной части крейтов станет возможным работать только со "стабильным Rust", то есть без единого использования частей Rust, помеченных #[feature]. После дедлайна, и до выхода бета-версии 1.0, мы намерены работать напрямую с авторами пакетов для crates.io, чтобы помочь перевести их код на стабильный Rust и выявить все пробелы в стабилизации языка.
Мы надеемся, что к моменту выхода беты значительная часть экосистемы перейдет с ночных сборок на стабильные релизы. Чтобы достичь этого, нужно чтобы все сообщество стало двигаться в направлении стабилизации, которую мы координируем с помощью discuss [16]. Если вы еще не включились в этот процесс, пожалуйста зайдите туда и расскажите какие ключевые нестабильные API вы используете.
Автор: werktone
Источник [17]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/82919
Ссылки в тексте:
[1] предыдущего: http://blog.rust-lang.org/2014/12/12/1.0-Timeline.html
[2] запланированы: http://blog.rust-lang.org/2015/01/09/Rust-1.0-alpha.html
[3] замыкания с полным захвтом: https://github.com/rust-lang/rfcs/blob/master/text/0231-upvar-capture-inference.md
[4] правила деструкторов: https://github.com/rust-lang/rfcs/pull/769
[5] спроектирован: https://github.com/rust-lang/rfcs/pull/474
[6] тщательно пересмотрена: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md
[7] Новое неявное приведение типов: https://github.com/rust-lang/rfcs/pull/241
[8] именования фич API: https://github.com/rust-lang/rfcs/pull/475
[9] утвердили нотацию диапазонов: https://github.com/rust-lang/rfcs/pull/702
[10] утверждены: http://internals.rust-lang.org/t/orphan-rules/1322
[11] утверждена: https://github.com/rust-lang/rfcs/pull/560
[12] ковариантность и контравариантность типов: https://github.com/rust-lang/rfcs/pull/738
[13] изменения в трейте Send: https://github.com/rust-lang/rfcs/pull/458
[14] изменения в стандартной библиотеке после реформы целочисленных типов в alpha1: https://github.com/rust-lang/rust/issues/22240
[15] системой стабильности: http://blog.rust-lang.org/2014/10/30/Stability.html
[16] discuss: http://users.rust-lang.org/t/using-unstable-apis-tell-us-about-it/157/26
[17] Источник: http://habrahabr.ru/post/250577/
Нажмите здесь для печати.