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

Rust в 2016 году

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

2015

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

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

2016

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

  • инкрементальная компиляция
  • среды разработки (IDE) [23]
  • переписывание и объединение инструментов multirust [24] и rustup [25]
  • улучшение поддержки кросскомпиляции
  • улучшение поддержки Windows
  • пакеты для дистрибутивов Linux
  • инструменты для рефакторинга
  • улучшение работы rustfmt [26]
  • использование Cargo для сборки rustc?

Сообщество

Было здорово наблюдать как растет сообщество в 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/