Rust в 2016 году
2015 год был значительным годом для Rust: мы выпустили версию 1.0, стабилизировали большинство элементов языка и кучу библиотек, значительно выросли как сообщество, а также реорганизовали управление проектом. Может показаться что 2016 год не будет таким же интересным (будет трудно превзойти выпуск 1.0), но это будет супер-важный год для Rust, в которым произойдёт много захватывающих вещей. В этой статье я расскажу о том, что, как я думаю, должно произойти. Это не официальная позиция и не обещание разработчиков Rust.
2015
Прежде чем мы поговорим о будущем, вот несколько цифр за прошлый год:
В 2015 году силами сообщества Rust:
- Создано 331 предложение по улучшению языка (RFC)
- из которых 161 были принято и влито в основной репозиторий
- всего 120 человек подало RFC, из них 6 человек создало 10 и более, Alex Crichton создал 23 RFC
- Создано 559 задач по улучшению RFC
- Прислано и влито 4630 Pull Request в репозиторий Rust
- авторами которых является 831 человек, из них 91 создали больше 10 Pull Request, 446 человек создали только один, а Steve Klabnik был автором 551 Pull Request
- Создано 4710 задач
- из которых 1611 ещё открыты
- авторами которых является 1319 человек, из которых 79 создали больше 10, а Alex Crichton открыл всего 159 задач
- Выпущено шесть стабильных релизов Rust (1.0 — 1.5)
- Поддерживается стабильность Rust — 96% пакетов, которые компилировались на 1.0, по прежнему компилируются с использованием версии 1.5
2016
Как и во второй половине 2015 года, я ожидаю увидеть много постепенных усовершенствований в 2016 году: полировку библиотек, исправление ошибок компилятора, улучшение инструментов и увеличение количества счастливых пользователей. Также на горизонте есть довольно много крупных изменений — последние месяцы мы провели много времени занимаясь планированием, рефакторингом и консолидацией проекта, и я ожидаю что это принесёт свои плоды.
Язык
Специализация реализаций (impl specialization) — это возможность иметь несколько реализаций типажа для одного типа, когда существует возможность определить наиболее частную из них. Это открывает возможности для оптимизации и решает некоторые раздражающие вопросы. Существующий RFC почти принят и работа идёт полным ходом. Хороший выбор для начала 2016 года.
Последнее время мы также обсуждаем эффективную реализацию наследования (а-ля виртуальные структуры). Существует некая красивая взаимосвязь между специализацией и наследованием, так что большая часть плана уже составлена. Пока всё ещё остаются кое-какие важные пробелы, но я надеюсь, что они будут заполнены.
Ещё одна новая возможность системы типов, обсуждаемая последнее время, — это абстрактные типы возврата (abstract return types, иногда также называемые «impl trait»). Она позволяет использовать типаж (вместо типа) в качестве возвращаемого значения функции. Идея проста, но есть несколько больных вопросов, которые нужно будет решить. Но поскольку у сообщества существует потребность в этой возможности, я думаю, что она будет реализована в 2016 году.
Новая система выделения памяти и синтаксис размещения (placement box syntax) позволит Rust удовлетворить кучу потребностей системного программирования (например, позволив выбрать аллокатор для некоторой коллекции). Также это дверь к возвращению сборки мусора в Rust. Felix Klock упорно трудится над дизайном и реализацией, чтобы эти возможности появились в этом году.
Моей наибольшей задачей по языку будет реконструкция системы макросов, в частности, появление процедурных макросов, которые в итоге должны стать полноценной частью стабильного Rust. Я писал об этом подробно в своём блоге.
Одной из не самых сильных сторон Rust является обработка ошибок. Мы обсуждали различные варианты
сделать её более удобной, и похоже что в скором времени любимый вариант будет принят в качестве RFC.
Это предложение добавляет оператор ?
, который работает аналогично макросу try!
(например, можно
будет писать foo()?
там, где сегодня вы пишете try!(foo())
), а также вводит новое выражение
try ... catch
, которое позволяет перехватывать и обрабатывать исключения. Я ожидаю, что это
предложение (или во всяком случае очень похожее) будет принято и реализовано очень скоро.
Мы могли бы, наконец, сказать до свидания drop-флагам. Так или иначе, мы мечтаем об этом.
Библиотеки
Я ожидаю, что 2016 год станет годом библиотек. Стандартная библиотека выглядит хорошо, и я думаю что в ней будут появляться только незначительные улучшения. Я также думаю, что мы будет включать некоторые внешние пакеты в стандартную библиотеку, но скорее всего это будет происходить медленно и постепенно, ближе к концу года. С другой стороны, будет происходить много интересного за пределами репозитория Rust, как в инкубаторе, так и в других местах.
Библиотека libc в значительной степени устаканена, так что я думаю что в этом году она будет полироваться и двигаться в направлении стабилизации.
rand — ещё один crate из инкубатора, на стабилизацию которого можно рассчитывать, и я не думаю что будут происходить какие-либо крупные изменения API в будущем.
Одним из самых волнующих пакетов является mio, который обеспечивает очень низко-уровневую поддержку асинхронного IO. Я рассчитываю увидеть значительное развитие и движение в сторону получения официального статуса в этом году.
Также есть несколько действительно интересных пакетов связанных с параллелизмом: crossbeam, rayon, simple_parallel, и другие. Я понятия не имею к чему в конечном итоге мы придём в этой области, и мне очень интересно будет это увидеть.
Инструменты
Я думаю, что 2016 год будет захватывающим с точки зрения инструментов разработки для Rust. Для нас это направление имеет высокий приоритет, и мне хотелось бы подчеркнуть некоторые вещи, над которыми мы сейчас работаем:
- инкрементальная компиляция
- среды разработки (IDE)
- переписывание и объединение инструментов multirust/rustup
- улучшение поддержки кросскомпиляции
- улучшение поддержки Windows
- пакеты для дистрибутивов Linux
- инструменты для рефакторинга
- улучшение работы rustfmt
- использование Cargo для сборки rustc?
Сообщество
Было здорово наблюдать как растёт сообщество в 2015 году, и я надеюсь, что оно вырастет ещё больше в 2016. Я с нетерпением ожидаю знакомства с новыми потрясающими людьми и новыми интересными проектами, ожидаю увидеть новые статьи и новые взгляды на язык с точки зрения людей с различным предыдущим опытом, ожидаю больше встреч и больше всего!
Также по меньшей мере одна книга о Rust будет опубликована в этом году, и мы надеемся, что их будет больше. Наряду с улучшениями онлайн документации, я думаю, что это будет реальным стимулом для новичков изучать Rust.
Я не знаю об официальных планах, но я надеюсь и ожидаю проведения очередного Rust Camp в этом году. На прошлогоднем мероприятии было весело, и я уверен что было бы здорово увидеть продолжение.
Я также ожидаю увидеть как Rust становится все более «серьёзным» — его использование в продакшене и важных проектах с открытым исходным кодом. Ожидаю увидеть как существующие проекты на Rust становятся более значимыми сами по себе, а не только как «проекты использующие Rust».
Некоторые вещи, которые, я думаю, не произойдут
Типы высшего порядка — я думаю, все мы хотим их в той или иной форме, но это огромный вызов с точки зрения архитектуры и большое количество вопросов, над которыми нужно будет поработать. Я буду очень удивлён, увидев основательный RFC по внедрению типов высшего порядка в этом году, не говоря уже о реализации.
Обратная несовместимость — после 1.0 мы были довольно хороши в сохранении стабильности и не ломали уже работающие вещи, и я уверен, что мы сможем продолжить эту тенденцию.
2.0 — есть дискуссия по поводу выпуска обратно несовместимой версии Rust, но это выглядит все менее реалистичным для 2016 года. Пока нам удаётся двигаться в рамках обратно совместимых релизов достаточно хорошо, и нет ничего такого, что потребовало бы от нас выпуска обратно несовместимой версии. Я не думаю, что нам удастся всегда обходиться без выпуска 2.0, но я думаю что это произойдёт точно не в 2016 году.
В независимости от того, что именно случится, я верю что 2016 год будет прекрасным годом для всего сообщества. С новым годом!