- PVSM.RU - https://www.pvsm.ru -
2015 год был значительным годом для Rust: мы выпустили версию 1.0, стабилизировали большинство элементов языка и кучу библиотек, значительно выросли как сообщество, а также реорганизовали управление проектом [1]. Может показаться что 2016 год не будет таким же интересным (будет трудно превзойти выпуск 1.0 [2]), но это будет супер-важный год для Rust, в котором произойдет много захватывающих вещей. В этой статье я расскажу о том, что, как я думаю, должно произойти. Это не официальная позиция и не обещание разработчиков Rust.
Прежде чем мы поговорим о будущем, вот несколько цифр за прошлый год:
В 2015 году силами сообщества Rust:
Как и во второй половине 2015 года, я ожидаю увидеть много постепенных усовершенствований в 2016 году: полировку библиотек, исправление ошибок компилятора, улучшение инструментов и увеличение количества счастливых пользователей. Также на горизонте есть довольно много крупных изменений – последние месяцы мы провели много времени занимаясь планированием, рефакторигом и консолидацией проекта, и я ожидаю что это принесет свои плоды.
Cпециализация реализаций (impl specialization) – это возможность иметь несколько реализаций типажа для одного типа, когда существует возможность определить наиболее частную из них. Это открывает возможности для оптимизации и решает некоторые раздражающие вопросы. Существующий RFC [7] почти принят и работа идет полным ходом. Хороший выбор для начала 2016 года.
Последнее время мы также обсуждаем эфективную реализацию наследования (а-ля виртуальные структуры). Существует некая красивая взаимосвязь между специализацией и наследованием [8], так что большая часть плана уже составлена. Пока все еще остаются кое-какие важные пробелы, но я надеюсь, что они будут заполнены.
Еще одна новая возможность системы типов, обсуждаемая последнее время [9], – это абстрактные типы возврата (abstract return types, иногда также называемые «impl trait»). Она позволяет использовать типаж (вместо типа) в качестве возвращаемого значения функции. Идея проста, но есть несколько больных вопросов, которые нужно будет решить. Но поскольку у сообщества существует потребность в этой возможности, я думаю, что она будет реализована в 2016 году.
Новая система выделения памяти [10] и синтаксис размещения [11] (placement box syntax) позволит Rust удовлетворить кучу потребностей системного програмирования (например, позволив выбрать аллокатор для некоторой коллекции). Также это дверь к возвращению сборки мусора в Rust. Felix Klock упорно трудится над дизайном и реализацией, чтобы эти возможности появились в этом году.
Моей наибольшей задачей по языку будет реконструкция системы макросов, в часности, появление процедурных макросов, которые в итоге должны стать полноценной частью стабильного Rust. Я писал об этом подробно в своем блоге [12].
Одной из не самых сильных сторон Rust является обработка ошибок. Мы обсуждали различные варианты сделать ее более удобной, и похоже что в скором времени любимый вариант будет принят в качестве RFC [13]. Это предложение добавляет оператор ?
, который работает аналогично макросу try!
(например, можно будет писать foo()?
там, где сегодня вы пишете try!(foo())
), а также вводит новое выражение try ... catch
, которое позволяет перехватывать и обрабатывать исключения. Я ожидаю, что это предложение (или во всяком случае очень похожее) будет принято и реализовано очень скоро.
Мы могли бы, наконец, сказать до свидания drop-флагам [14]. Так или иначе, мы мечтаем об этом.
Я ожидаю, что 2016 год станет годом библиотек. Стандартная библиотека [15] выглядит хорошо, и я думаю что в ней будут появляться только незначительные улучшения. Я также думаю, что мы будем включать некоторые внешние пакеты в стандартную библиотеку, но скорее всего это будет происходить медленно и постепенно, ближе к концу года. С другой стороны, будет происходить много интересного за пределами репозитория Rust, как в инкубаторе [16], так и в других местах.
Библиотека libc [17] в значительной степени устаканена, так что я думаю что в этом году она будет полироваться и двигаться в направлении стабилизации.
rand [18] – еще один крейт из инкубатора [16], на стабизацию которого можно расчитывать, и я не думаю что будут происходить какие-либо крупные изменения API в будущем.
Одним из самых волнующих пакетов является mio [19], который обеспечивает очень низко-уровневую поддержку асинхронного IO. Я расчитываю увидеть значительное развитие и движение в сторону получения официального статуса в этом году.
Также есть несколько действительно интересных пакетов связанных с параллелизмом: crossbeam [20], rayon [21], simple_parallel [22], и другие. Я понятия не имею к чему в конечном итоге мы прийдем в этой области, и мне очень интересно будет это увидеть.
Я думаю, что 2016 год будет захватывающим с точки зрения инструментов разработки для Rust. Для нас это направление имеет высокий приоритет, и мне хотелось бы подчеркнуть некоторые вещи, над которыми мы сейчас работаем:
Было здорово наблюдать как растет сообщество в 2015 году, и я надеюсь, что оно вырастет еще больше в 2016. Я с нетерпением ожидаю знакомства с новыми потрясающими людьми и новыми интересными проектами, ожидаю увидеть новые статьи и новые взгляды на язык с точки зрения людей с различным предыдущим опытом, ожидаю больше встреч и больше всего!
Также по меньшей мере одна книга о Rust будет опубликована в этом году, и мы надеемся, что их будет больше. Наряду с улучшениями онлайн документации, я думаю, что это будет реальным стимулом для новичков изучать Rust.
Я не знаю об официальных планах, но я надеюсь и ожидаю проведения очередного Rust Camp в этом году. На прошлогоднем мероприятии [27] было весело, и я уверен что было бы здорово увидеть продолжение.
Я также ожидаю увидеть как Rust становиться все более «серьезным» – его использование в продакшене и важных проектах с открытым исходным кодом. Ожидаю увидеть как существующие проекты на Rust становятся более значимыми сами по себе, а не только как «проекты использующие Rust».
Типы высшего порядка – я думаю, все мы хотим их в той или иной форме, но это огромный вызов с точки зрения архитектуры и большое количество вопросов, над которыми нужно будет поработать. Я буду очень удивлен, увидев солидный RFC по внедрению типов высшего порядка в этом году, не говоря уже о реализации.
Обратная несовместимость – после 1.0 мы были довольно хороши в сохранении стабильности и не ломали уже работающие вещи, и я уверен, что мы сможем продолжить эту тенденцию.
2.0 – есть дискуссия по поводу выпуска обратно несовместимой версии Rust, но это выглядит все менее реалистичным для 2016 года. Пока нам удается двигаться в рамках обратно совместимых релизов достаточно хорошо, и нет ничего такого, что потребовало бы от нас выпуска обратно несовместимой версии. Я не думаю, что нам удастся всегда обходиться без выпуска 2.0, но я думаю что это произойдет точно не в 2016 году.
В независимости от того, что именно случиться, я верю что 2016 год будет прекрасным годом для всего сообщества. С новым годом!
Автор: defuz
Источник [28]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/108512
Ссылки в тексте:
[1] реорганизовали управление проектом: https://github.com/rust-lang/rfcs/blob/master/text/1068-rust-governance.md
[2] выпуск 1.0: http://habrahabr.ru/post/258069/
[3] предложение по улучшению языка (RFC): https://github.com/rust-lang/rfcs
[4] репозиторий Rust: https://github.com/rust-lang/rust
[5] задач: https://github.com/rust-lang/rust/issues
[6] 96% пакетов, которые компилировались на 1.0, по прежнему компилируются с использованием версии 1.5: https://internals.rust-lang.org/t/rust-regressions-2015-year-end-report/2993
[7] RFC: https://github.com/aturon/rfcs/blob/impl-specialization/text/0000-impl-specialization.md
[8] взаимосвязь между специализацией и наследованием: https://aturon.github.io/blog/2015/09/18/reuse/
[9] обсуждаемая последнее время: https://github.com/Kimundi/rfcs/blob/function_output_type_parameters/text/0000-function_output_type_parameters.md
[10] Новая система выделения памяти: https://github.com/pnkfelix/rfcs/blob/kind-allocator-api/text/0000-kinds-of-allocators.md
[11] синтаксис размещения: https://github.com/rust-lang/rfcs/blob/master/text/0809-box-and-in-for-stdlib.md
[12] своем блоге: http://www.ncameron.org/blog/
[13] любимый вариант будет принят в качестве RFC: https://github.com/glaebhoerl/rfcs/blob/trait-based-exception-handling/active/0000-trait-based-exception-handling.md
[14] drop-флагам: https://doc.rust-lang.org/stable/nomicon/drop-flags.html
[15] Стандартная библиотека: https://doc.rust-lang.org/std/
[16] инкубаторе: https://github.com/rust-lang-nursery
[17] libc: https://github.com/rust-lang-nursery/libc
[18] rand: https://github.com/rust-lang-nursery/rand
[19] mio: https://github.com/carllerche/mio
[20] crossbeam: https://github.com/aturon/crossbeam
[21] rayon: https://github.com/nikomatsakis/rayon
[22] simple_parallel: https://github.com/huonw/simple_parallel
[23] среды разработки (IDE): https://www.rust-lang.org/ides.html
[24] multirust: https://github.com/brson/multirust
[25] rustup: https://github.com/rust-lang/rustup
[26] rustfmt: https://github.com/rust-lang-nursery/rustfmt
[27] прошлогоднем мероприятии: http://rustcamp.com/
[28] Источник: http://habrahabr.ru/post/274757/
Нажмите здесь для печати.