Rust в 2016 году

оригинал: Nick R. Cameron • перевод: Иван Иващенко • новости • поддержите на Patreon

2015 год был значительным годом для Rust: мы выпустили версию 1.0, стабилизировали большинство элементов языка и кучу библиотек, значительно выросли как сообщество, а также реорганизовали управление проектом. Может показаться что 2016 год не будет таким же интересным (будет трудно превзойти выпуск 1.0), но это будет супер-важный год для Rust, в которым произойдёт много захватывающих вещей. В этой статье я расскажу о том, что, как я думаю, должно произойти. Это не официальная позиция и не обещание разработчиков Rust.

2015

Прежде чем мы поговорим о будущем, вот несколько цифр за прошлый год:

В 2015 году силами сообщества Rust:

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. Для нас это направление имеет высокий приоритет, и мне хотелось бы подчеркнуть некоторые вещи, над которыми мы сейчас работаем:

Сообщество

Было здорово наблюдать как растёт сообщество в 2015 году, и я надеюсь, что оно вырастет ещё больше в 2016. Я с нетерпением ожидаю знакомства с новыми потрясающими людьми и новыми интересными проектами, ожидаю увидеть новые статьи и новые взгляды на язык с точки зрения людей с различным предыдущим опытом, ожидаю больше встреч и больше всего!

Также по меньшей мере одна книга о Rust будет опубликована в этом году, и мы надеемся, что их будет больше. Наряду с улучшениями онлайн документации, я думаю, что это будет реальным стимулом для новичков изучать Rust.

Я не знаю об официальных планах, но я надеюсь и ожидаю проведения очередного Rust Camp в этом году. На прошлогоднем мероприятии было весело, и я уверен что было бы здорово увидеть продолжение.

Я также ожидаю увидеть как Rust становится все более «серьёзным» — его использование в продакшене и важных проектах с открытым исходным кодом. Ожидаю увидеть как существующие проекты на Rust становятся более значимыми сами по себе, а не только как «проекты использующие Rust».

Некоторые вещи, которые, я думаю, не произойдут

Типы высшего порядка — я думаю, все мы хотим их в той или иной форме, но это огромный вызов с точки зрения архитектуры и большое количество вопросов, над которыми нужно будет поработать. Я буду очень удивлён, увидев основательный RFC по внедрению типов высшего порядка в этом году, не говоря уже о реализации.

Обратная несовместимость — после 1.0 мы были довольно хороши в сохранении стабильности и не ломали уже работающие вещи, и я уверен, что мы сможем продолжить эту тенденцию.

2.0 — есть дискуссия по поводу выпуска обратно несовместимой версии Rust, но это выглядит все менее реалистичным для 2016 года. Пока нам удаётся двигаться в рамках обратно совместимых релизов достаточно хорошо, и нет ничего такого, что потребовало бы от нас выпуска обратно несовместимой версии. Я не думаю, что нам удастся всегда обходиться без выпуска 2.0, но я думаю что это произойдёт точно не в 2016 году.

В независимости от того, что именно случится, я верю что 2016 год будет прекрасным годом для всего сообщества. С новым годом!