Website development
Programming
Rust
Kotlin
Elixir/Phoenix
16 September

Пять перспективных языков программирования со светлым будущим (3 года спустя)

КДПВ


В 2016-м году я опубликовал перевод статьи про 5 перспективных языков программирования, в которой прогнозировался их рост в ближайшие 2-3 года.
Зачастую прогнозы так и остаются прогнозами, без последующего анализа. Но я решил, что это непорядок. И посколько 3 года уже пролетели, пора подвести промежуточные итоги и посмотреть, что произошло с этими языками за это время.


Однако, прежде чем мы перейдём к пятёрке наших героев, хочется уделить немного внимания предсказанному в той же статье переходу Swift и Go из второго эшелона в первый.


про эшелоны

В исходной статье языки программирования условно делятся на 3 эшелона по популярности.
Первый эшелон включает мейнстрим-языки, такие как Java, JavaScript, Python, Ruby, C# и т.д.
Языки второго эшелона пытаются пробиться в мейнстрим, но ещё не добились этого. Они доказали свою состоятельность путем создания сильных сообществ, но они до сих пор не используются большинством консервативных IT-компаний. Большинство языков в первом эшелоне прочно укоренились на своих позициях. Поэтому выпадение языка с лидирующих позиций занимает ощутимое время, а для языка второго эшелона очень трудно пробиться в первый.
К третьему эшелону относятся непопулярные языки, а также относительно новые перспективные языки (о которых пойдёт речь), которые только начинают свой путь наверх. Некоторые языки пребывают в третьем эшелоне на протяжении многих лет, не получая популярности, в то время как другие врываются на сцену всего за пару лет.


Оба эти языка безусловно укрепили свои позиции. Swift от версии 3.0 успел дойти до 5.0 и наконец пообещал стабильность ABI. Другими словами, Apple больше не планирует раздражать программистов на Swift постоянной сменой сигнатур методов и т.д. Кроме того, Swift окончательно потеснил Objective-C, обогнав его в свежем рейтинге RedMonk и поднявшись на 6 позиций по сравнению с рейтингом 3-х летней давности. Очевидно, что тенденция продолжится, поэтому можно сказать, Swift занял своё место в первом эшелоне.


Что касается Go, то он сместился в рейтинге на одну позицию ниже (с 15-го места на 16-е), прошёл путь от версии 1.7 до 1.13, и находится в стадии глобального переосмысления обработки ошибок и наличия дженериков в языке — вопросов, которые вызывали больше всего нареканий в течение всех 12 лет его существования. В общем, Go потихоньку эволюционирует, растёт количество проектов, которые применяют его в production, но о переходе в первый эшелон пока говорить рано.


Помимо Swift и Go, стоит отметить TypeScript, который за 3 года совершил необычайный прорыв, перескочив в рейтинге с 26-го места на 10-е. Если вы занимаетесь разработкой фронтенда, но до сих пор не ознакомились с этим языком, то момент настал. Уже прям must-know.


А теперь фанфары и главная часть — наша пятёрка языков, которым пророчили переход из 3-го эшелона во 2-й. Что изменилось для них за эти 3 года?!


Для начала, сводная таблица по количественной OpenSource-активности на Github:


Rust Elixir Kotlin Elm Crystal
Repos Users Repos Users Repos Users Repos Users Repos Users
2016 5146 1935 2668 861 960 1541 433 194 150 52
2019 23700 13500 16800 4000 24300 26400 5300 994 1200 469
Рост 4.6x 7x 6.3x 4.6x 25x 17x 12x 5.1x 8x 9x

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


Понятно, что чем скромнее были позиции языка 3 года назад, тем легче показать кратный рост. Но тем не менее, с этой задачей отлично справились и Rust, и Elixir — лидеры нашей пятёрки по кол-ву репозиториев в 2016 году. Однако, самый выдающийся результат показал Kotlin, показав по-настоящему взрывной рост. О причинах поговорим чуть ниже, а пока давайте посмотрим какой путь проделали эти языки по лестнице RedMonk:


RedMonk stats 2016


RedMonk stats 2019


Чтобы оценить продвижение языков по графику, я взял их координаты и посчитал дельту:


((x2 - x1) + (y2 - y1)) / 2

Получились такие результаты среднего прироста по обеим осям:


Kotlin:  +41%
Rust:    +20%
Elixir:  +20%
Elm:     +18%
Crystal: +32% # из-за того, что 3 года назад его не было на графике вообще

Как видно, все языки пятёрки существенно продвинулись к популярности (вверх и вправо). Занятный факт, что все они находятся ниже диагональной линии, что означает относительно низкую активность на StackOverflow. Впрочем, тут нет никакой загадки, у сообщества каждого из этих языков есть форум на базе Discourse, и как следствие большинство вопросов обсуждаются там, а не на StackOverflow.


В целом, все 5 языков показали хороший количественный рост. Но кто же проявил себя лучше всех? Давайте составим своеобразный Top и рассмотрим не только количественные, но и качественные критерии.


5-е место: Elm


К сожалению, Elm показал достаточно удручающие результаты. Во-первых, за 3 года вышло всего 2 релиза, причём последний на данный момент — 0.19 оказался настолько противоречивым, что даже привёл к некоторому расколу сообщества. И вот уже больше года новых версий не выпускается, хотя работа в репозитории идёт достаточно активно. При этом Эван Чаплицки (автор языка) ещё 2 года назад дал понять, что никакого вразумительного roadmap нет и не будет. При таком раскладе, Elm остаётся чисто экспериментальным языком с теперь уже сомнительным будущим. Хотя есть люди, которые по-прежнему смотрят на Elm c оптимизмом. С их доводами можно ознакомиться тут.


Стоит отметить, что ещё в комментариях к исходной статье dimsmol, fshp и hellosandrik высказывались в пользу PureScript, как более жизнеспособной альтернативы Elm. И хотя он тоже до сих пор не достиг версии 1.0, динамика релизов выглядит более обнадёживающей. Так что любителям Haskell стоит обратить внимание на этот язык.


4-е место: Crystal


Если 3 года назад Crystal вообще не было видно на графике RedMonk, то теперь он вполне уверенно ворвался в Top-100 языков программирования. А также прошёл путь от версии 0.19 до 0.30. Впрочем, столь большое количество релизов показывает не только динамичность развития языка, но и его нестабильность. К большому сожалению, план выпустить версию 1.0 в 2017 году провалился.


Как мне видится, во многом тут виновато совсем не вовремя появившееся желание реализовать поддержку Windows. Этот эпик продвигается очень медленно и требует значительных усилий от и без того маленькой команды разработки. Причём абсолютно непонятно зачем оно нужно до релиза 1.0. Основная целевая аудитория Crystal — это программисты, использующие Ruby в повседневной работе. А программировать на Ruby под Windows считалось моветоном ещё лет 10 назад. Другими словами, доля программистов, использующих Windows по работе и при этом заинтересованных в Crystal, исчезающе мала. И тратить на это огромные усилия, не имея на руках стабильной версии языка, крайне недальновидно. Ведь наличие версии 1.0 — это практически обязательное условие для побуждения средних и крупных компаний к использованию технологии.


В итоге, Crystal теряет потенциальную аудиторию, т.к. компании, которым стало тесно в рамках Ruby и Python массово переходят на Elixir и Go. А для Crystal остаётся узкая ниша компаний, чьи программисты не смогли переключиться на эти языки. И это печально, т.к. хоть Crystal и не конкурент Elixir, но вот с Go он мог бы конкурировать вполне успешно, предоставляя местами даже лучшую производительность и сравнимую функциональность, приправленную выразительностью Ruby и встроенной в компилятор защитой от nil reference.


2-е* место: Rust


Rust взял курс на выпуск новой версии компилятора раз в 6 недель и придерживается этого плана. Как результат, за 3 года язык долетел с версии 1.11 до 1.37. В этом есть свои плюсы, например, ввод новых функциональных возможностей идёт постепенно и очень плавно. Но есть и минусы, например, понадобившаяся вам библиотека может опираться на более новую версию языка, чем ваш проект, начатый 3 месяца назад. Другими словами, будьте готовы к частым обновлениям. Тем не менее Core Team понимает, что постоянные обновления могут утомлять и объявили 2019-й — годом восстановления сил и стабилизации. Делается упор на полировку того, что есть, доработку затянувшихся фич (которые были давно начаты, но не доведены до master) и организационные моменты. Кроме того планируется улучшить поддержку IDE через улучшение Rust Language Server, улучшить отладку для WebAssembly и посмотреть в сторону разработки GUI-тулкита.


В целом, Rust находится в процессе обретения статуса стабильного, сформировавшегося языка. Определенно стоит с ним познакомиться, если вам интересна high-performance разработка. Однако, сдерживающим фактором роста популярности является репутация Rust, как языка со слишком высоким порогом входа, которая отпугивает от него новичков. Поэтому сообществу ещё предстоит продолжение работы над имиджем языка в этом плане, если они не хотят пойти по пути Haskell ("avoid success at all costs"). Впрочем, не пугайтесь — те, кто попробовал, его любят: Rust занял 1-е место среди The Most Loved Languages в опросе StackOverflow в этом году.


* в резюме статьи объяснено, почему 2 вторых места :-)


2-е место: Elixir


Если Rust ещё только планирует стабилизироваться в этом году, то Elixir, пройдя за 3 года путь от версии 1.3 до 1.9, уже это сделал. В ближайшее время не планируется никаких крупных изменений или дополнений в самом языке. И есть 2 причины, по которым Elixir может себе такое позволить:


Во-первых, поскольку Elixir базируется на Erlang/OTP, он может пользоваться результатами усилий Ericsson и OTP Team по работе над рантаймом и виртуальной машиной. Elixir Team так же старается вносить свой вклад в эту работу и этот вклад ощутимо вырос за предыдущие 3 года.


Во-вторых, Elixir спроектирован как расширяемый язык. Инструменты и абстракции, которые были использованы для создания и совершенствования языка, доступны и для библиотек и фреймворков. Это означает, что сообщество может продолжать улучшать экосистему без необходимости изменений в самом языке. В том числе и сам Жозе Валим (автор Elixir) пошёл этим путём и недавно анонсировал Broadway — библиотеку, упрощающую отказоустойчивую параллельную обработку данных из произвольных источников.


В общем, Elixir уже является стабильным и полностью сформировавшимся языком, который отлично подойдёт всем, кто разрабатывает системы, нацеленные на высокую нагрузку или на высокую стабильность, или на то и другое одновременно. По сути для таких проектов особых вариантов и нет, либо использовать Erlang, либо Elixir, либо изобретать кучу собственных велосипедов. Кстати, если вы присматриваетесь к частичному внедрению Elixir в существующие проекты, рекомендую отличную книгу “Adopting Elixir”. В ней же можно почитать про опыт достаточно крупных компаний, которые уже перешли на этот язык.


1-е место: Kotlin


Безусловный лидер пятёрки — Kotlin. Ему удалось за 3 года проделать невероятный путь и практически перескочить из 3-го эшелона в 1-й, заменив Java в разработке под Android. Начиналось это с официальной поддержки Kotlin, анонсированной в 2017 году командой разработки Android. И, как следствие, его включения в Android Studio 3.0. В итоге, дружба с Android привела к тому, что 4 месяца назад Google объявил Kotlin предпочтительным выбором для разработки под Android. Конечно, этому во многом поспособствовали патентные споры Google и Oracle насчёт Java, но, разумеется, и заслуга JetBrains в этом есть. Они далеко не первые, кто захотел сделать Java с человеческим лицом, но первые кому удалось это сделать так, что отказ от Java в пользу нового языка стал мейнстримом. Мои поздравления!


Кстати, JetBrains также активно развивает Kotlin Native, позволяющий компилировать код на Kotlin в нативный бинарник.


Что касается рейтинга RedMonk, язык занимает пока что 20-е место, но это очевидно связано с тем, что Kotlin может без проблем использовать существующие Java-библиотеки, соответственно нет насущной необходимости их переписывать на него. Тем не менее, становится всё меньше причин начинать новые проекты на Java, даже если они не связаны с Android-разработкой. Так что вполне вероятно, что спустя ещё 3 года Java останется лишь в кровавом энтерпрайзе, а в остальном Kotlin займёт её место, как Swift занял место Objective-C.


Резюме


Можно сказать, что прогноз в целом оказался удачным. Хоть Elm и Crystal пока не оправдали надежд и их дальнейшее будущее пока под большим вопросом, зато остальные 3 языка проявили себя просто отлично. Kotlin при поддержке Google рванул как ракета в небеса, а Rust и Elixir полностью стабилизировались и однозначно стали production-ready языками. Я не смог выбрать, кто из них показал лучший прогресс… где-то Elixir обогнал Rust, где-то наоборот, и даже по кол-ву юзеров на форумах сообществ у них паритет (около 11 тыс. человек), поэтому в статье я им обоим отдал 2-е место. Эти языки определённо заслуживают внимания.
Да, каждый из них имеет свою нишу и на тривиальных проектах можно обойтись и без них. Зато в высоконагруженных проектах они придут на выручку и предоставят вам на выбор 2 пути: выжать максимум из железа (Rust) или обеспечить лёгкое масштабирование и отказоустойчивость (Elixir).


P.S. А как за 3 года изменился ваш Top перспективных языков?

Какие языки из нашей пятёрки вы применяли на практике за предыдущие 3 года?
3.3% Crystal 20
14.3% Elixir 86
3.9% Elm 24
56.2% Kotlin 338
42% Rust 253
601 user voted. 695 users abstained.

+58
56.2k 79
Comments 154