Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Categories:

На выпуск Julia 1.0.0

Свершилось: релиз Julia 1.0.0 -- https://julialang.org. После этого релиза в язык на некоторое время прекращают вносить breaking changes (то есть такие изменения, которые делают написанный на предыдущих версиях языка код неработоспособным) и сосредотачиваются на качестве компиляции и развитии экосистемы языка. Вот основные изменения по сравнению с предыдущей версией: https://julialang.org/blog/2018/08/one-point-zero. Вот ещё от Julia Computing, коммерческая организация, стоящая за Julia -- https://juliacomputing.com/press/2018/08/10/Julia-1.0-Released.html. Тут нужно заметить, что Julia появилась в феврале 2012 года, для языка это детский возраст (тот же Rust появился в 2010 году, Go представлен в ноябре 2009 года, часто сравниваемый с Julia язык R появился в 1993). Так что цыплят популярности по осени считать будем, в следующую пару лет.

Общественный консенсус был в том, что именно постоянное изменение языка на момент его становления и было причиной относительной непопулярности Julia (то есть в десятку самых популярных языков Julia пока не вошла, хотя в 50 языках уже прочно прописалась). Если бы это не был "новый, быстро меняющийся, и поэтому плохо приспособленный для production" язык, то он был бы супер-дупер популярен. Моё мнение тут отличается от этого "консенсуса".

Увы, решаемая Julia основная проблема двух языков (пишешь алгоритм на мощном языке высокого уровня для скорости написания, потом в production переписываешь на языке низкого уровня для скорости выполнения -- а на Julia ничего переписывать не нужно) не слишком большой аргумент для оценивающего возможности использования Julia для работы. Хотя приятно, конечно, написать код на языке высокого уровня, который потом будет работать на суперкомпьютере. Julia уже пополнила ряды Fortran и С как язык для суперкомпьютерных вычислений -- другие языки высокого уровня с этим не справляются, их в HPC, high performance computing не пускают, слишком дорогое удовольствие получается, в буквальном смысле слова. Но это всё нишевые применения. Все эти "скорости" и "параллельности" (в том числе "проблема двух языков") волнуют избранных, которые напоролись на ровно эту проблему. А на избранных популярного языка не сделаешь.

Конечно, есть подробные "рациональные аргументы" в пользу Julia. Вот текст "Почему Numba и Cython не заменят Julia", то есть почему разогнанный до околосветовых скоростей Питон с правильно разогнанной для GPU матричной арифметикой будут хуже Julia -- http://www.stochasticlifestyle.com/why-numba-and-cython-are-not-substitutes-for-julia/. Но это "рациональные аргументы", их проигнорируют.

Как всегда с языками, выиграет в конечном итоге не "объективная польза", а эстетический фактор. Про Julia самые распространённые слова — "язык очень приятен, патамушта". Именно это IMHO главный фактор. Я начитался разных индивидуальных отзывов, которые все построены были по одинаковому шаблону: "язык исключительно приятный, очень хотел бы на нём программировать, но..." -- и дальше ни разу я не встречал "язык слишком часто меняется, чтобы писать на нём", причины указывались другие.

Моя оценка "объективных причин" текущих причин относительной непопулярности Julia другая: она относится к поддержке эко-системой Julia современного программирования programming-in-the-large против programming-in-the-small — https://en.wikipedia.org/wiki/Programming_in_the_large_and_programming_in_the_small. Ибо вся проблема двух языков "написал на одном языке и в production на другом языке" относится к programming-in-the-small, написанию одним человеком маленьких программ, "олимпиадному программированию", программированию как у Дональда Кнута с его справочниками алгоритмов. Так и рекомендуют использовать в programming-in-the-small: "если вам нужно написать алгоритм самим, то пишите на Julia". Но это не мейнстрим. Мейнстрим — крупноблочное строительство.

Так получилось, что Julia это язык будущего поколения, который содержит в себе все необходимые свойства для поддержки programming-in-the-lagre (современный подход к программированию, сборка из больших блоков, по факту создание DSL под каждую задачу и использование кем-то другим разработанных DSL для всех встреченных по пути задач), но по факту вплоть до сегодняшнего дня это был отличный язык прошлого поколения, ибо использовать это programming-in-the-large вплоть до сегодняшнего момента было невозможно в силу постоянного отставания экосистемы и понимания того, какой стиль программирования должен быть у Julia для поддержки programming-in-the large -- паттерны крутого использования крутых фич языка ведь тоже нужно было изобретать!

Идея сделать wrappers для многочисленных уже готовых пакетов и отдать на откуп сообществу создание аналогичных более крутых пакетов не сработала. Ибо "опен сорс", фокусирования на чём-то инфраструктурном не запланируешь. Тут или взлетит, или не взлетит. Вот, по разным причинам пока не взлетело.

Как я понимаю, в направлении поддержки in-the-large сделано было несколько шагов буквально в последний год:
— свойства самого языка (это ОК, включая multiple dispatch). Тут сделано было чисто психологическое действие: язык 1.0.0 объявлен в его спецификации стабильным, что должно помочь пакетам жить долго без дополнительной поддержки. Их теперь не нужно будет перекомпилировать с исправлениями, а потом отлаживать раз в полгода.
— менеджер пакетов (история с современным менеджером пакетов pkg3 в Julia только-только началась: он работает по факту только с 1.0, но не в прошлых версиях — https://discourse.julialang.org/t/pkg3-plan-and-status/9763)
— инструкция как делать DSL, появилась ровно год назад, на базе удачного эксперимента с Modia (ибо пришли сильные компиляторщики из Modelica), https://julialang.org/blog/2017/08/dsl.
— есть примеры действительно уникальных больших пакетов, прежде всего решение дифференциальных уравнений http://juliadiffeq.org/ -- и понимание того, как такое делать в организационном плане, и как оформлять в языке. Modia, который нацелен занять место Modelica (я писал подробно тут: https://ailev.livejournal.com/1366789.html) тут тоже пример, язык уже выпущен в его первой версии: https://github.com/ModiaSim/Modia.jl и даже выпущен на этой недели Modia3D для решения задач движения физических тел в 3D, https://github.com/ModiaSim/Modia3D.jl. Таких пакетов, которые могут быть примером архитектуры больших прикладных эко-систем в Julia, уже несколько. Хотя все они очень нишевые, но их уже можно брать за образец в создании следующих подобных эко-систем, архитектуру пакетов с использованием DSL на расширяемом макросами языке и multiple dispatch уже не нужно придумывать, это уже не исследовательская задача.
— коммерческий провайдер инфраструктуры для Julia появился и буквально недавно профинансирован венчурными инвесторами: https://juliacomputing.com/

Так что да, по факту какие-то перспективы для programming-in-the-large открываются только сейчас. И поэтому я тоже ожидаю от Julia активного роста именно сейчас, после выхода 1.0, хотя и по другим причинам, нежели обсуждаются в сообществе early adopters.

Прямо сейчас из Лондона идёт live стриминг конференции JuliaCon: https://www.youtube.com/user/JuliaLanguage/featured, там довольно много интересного и нового про Julia.

Интересный момент в истории. В это же время Andrej Karpathy (сейчас директор AI в Tesla) объявляет, что приходит эра Software 2.0, ибо gradient descent будет писать программный код лучше, чем человек, и тут уж ничего не поделаешь -- люди будут кормить программы учебными данными (т.е. будут data engineers, а не software engineers -- - https://www.figure-eight.com/building-the-software-2-0-stack-by-andrej-karpathy-from-tesla/, и там сразу можете смотреть слайды, чтобы не тратить полчаса времени на прослушивание видео, идеи-то понятны: https://www.figure-eight.com/wp-content/uploads/2018/06/TRAIN_AI_2018_Andrej_Karpathy_Tesla.pdf).

Есть и дискуссия, подойдёт ли Julia для differential programming (подойдёт, кто бы сомневался -- https://ailev.livejournal.com/1393749.html). Но вопрос в том, что и программы для differentiable programming (и даже для differentiable architecture, появляется уже и такое -- https://arxiv.org/abs/1806.09055) будут писать роботы!

Так что пора уже обсуждать не то, будет ли популярен язык Julia у людей, а будет ли он популярен у роботов! Но это только "пора обсуждать", опять про неопределённое будущее. А популярность у людей у Julia набирается вот прямо сейчас.

Русскоязычный чат по Julia в телеграм -- https://t.me/JuliaLanguage.

UPDATE: Обсуждение в фейсбуке -- https://www.facebook.com/ailevenchuk/posts/10213527353232257
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 9 comments