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>
    там, де потрібно
    &[T]
    або
    &Arc<T>
    там, де потрібно
    &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 ви використовуєте.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.