Стефан Карпински: «Особой причины назвать так язык не было, просто нам понравилось это имя»
Стефан Карпински: «Особой причины назвать так язык не было, просто нам понравилось это имя»

Авторы языка — программисты Стефан Карпински, Джефф Безансон и Вирал Шах. В InfoWorld выяснили подробности о Julia, побеседовав с ведущим разработчиком языка Стефаном Карпински.

Какова главная цель создания Julia?

Мы начали дискуссии о необходимости нового языка в августе 2009 года. Вирал познакомил меня с Джеффом, мы сошлись на почве неудовлетворенности существующими языками для технических вычислений. Основная проблема в том, что для решения различных задач приходится пользоваться разными языками, так как каждый из них хорош в чем-то одном.

Говоря «технические вычисления», какие конкретно приложения вы имеете в виду?

Это широкая категория, включающая практически все, для чего нужен большой объем вычислений. Сам я, например, много занимался линейной алгеброй и статистическими методами. Для линейной алгебры лучшим инструментом считается Matlab. Для статистики это язык R, так что я много пользовался и тем и другим. Но они не взаимозаменяемы. Если вы возьметесь за статистические задачи в Matlab, у вас ничего не выйдет. Когда вы попытаетесь решать задачи линейной алгебры на R, то поймете, что он для этого непригоден.

Ученым предлагается альтернатива Си — язык JuliaИтак, вы разработали Julia, чтобы упростить создание технических приложений?

Да. Идея в том, чтобы предложить язык, гарантирующий максимальную продуктивность. Поэтому Julia был создан как динамический язык, обеспечивающий относительную простоту написания кода и реализующий очень простую модель программирования. Но он еще и дает крайне высокое быстродействие кода, благодаря чему исключается потребность еще в одном языке — Си, к которому часто прибегают, когда нужна скорость. Упомяну еще NumPy, тоже технический язык. При использовании Matlab, R и NumPy неизменно приходится обращаться к Си, когда нужно быстродействие. Одна из наших целей — добиться настолько высокой производительности программ на Julia, чтобы никогда не приходилось переходить на Си.

На сайте Julia говорится, что язык разработан для облаков и параллельного программирования. Не могли бы вы уточнить, что имеется в виду?

Сегодня большой объем вычислений выполняется в облачных средах, там, где можно выделять ресурсы по требованию. В традиционных параллельных вычислениях для технических задач традиционно используется Message Passing Interface как практически стандартный механизм организации работы крупномасштабных параллельных приложений. Но ему недостает эластичности. К примеру, если вы уже в ходе вычислений захотите добавить процессоров, это вам не удастся.

У MPI тоже ограниченные возможности восстановления после сбоев, а это огромная проблема для облачных решений, поскольку они исполняются не на специализированном оборудовании — не на суперкомпьютерах с очень высокой надежностью. Это всего лишь экземпляры виртаульных машин где-то в облаке, и нередко бывает, что ваш вычислительный ресурс просто исчезает.

Как в Julia преодолеваются подобные проблемы?

Ну, на сегодня они еще не решены, мы над этим работаем. Зато у нас уже есть простая модель построения больших параллельных приложений, основанная на глобальном распределенном адресном пространстве. Это значит, что вы можете оперировать со ссылкой на объект, который находится на другой машине, участвующей в вычислениях. Вы можете легко манипулировать такими ссылками и передавать их между машинами, так что несложно отследить, какие вычисления на каких системах выполняются. Кроме того, прямо во время вычислений вы можете подключать новые машины. Мы еще не реализовали механизм отключения машин, поскольку сочли, что это менее актуально. Но если во время выполнения вычислений вы поняли, что вам требуются дополнительные машины для ускорения процесса, это уже можно.

Можно ли на Julia писать приложения обработки Больших Данных, их анализа и т. д.?

Это зависит от того, что подразумевается под Большими Данными — сегодня этот термин слишком многозначен. Но, например, поскольку задачи прогнозного анализа и моделирования часто сводятся к задачам линейной алгебры, Julia для них подойдет, как и для задач анализа графов. Для некоторых видов приложений, возможно, больше годятся технологии вроде Hadoop. Если вам нужно подсчитать огромное количество вхождений, лучше воспользуйтесь Hadoop. Но вот если вы хотите разложить огромную матрицу на множители, Hadoop не справится. В этом случае Julia именно то, что надо.

Julia вряд ли подойдет для разработки, например, бухгалтерского или мобильного приложения, верно?

У нас есть планы по созданию компилятора. С ним вы сможете писать на Julia код для встраиваемых и мобильных приложений.

И когда же он будет готов?

Ориентировочно в будущем году.

На сайте Julia говорится: «Благодаря JIT-компилятору Julia, основанному на виртуальной машине LLVM, а также ввиду особенностей архитектуры язык приближается по быстродействию к Си и C++, а зачастую оказывается с ними на равных». Для чего нужно было догнать эти языки по быстродействию?

К Си и C++ я бы добавил Фортран, еще один старый компилируемый язык, известный своим высоким быстродействием. Фактически эти языки — золотой стандарт, по которому оценивается быстродействие. Если вам удалось достичь скорости C++ или превысить ее, значит, вы чего-то добились в разработке нового языка.

На каком этапе сейчас находится разработка Julia?

Сейчас язык существует в версии pre-1.0. Мы рассчитываем выпустить 1.0 в самое ближайшее время. Мы очень заинтересованы в скорейшем выпуске первой версии. Для меня и других ведущих разработчиков это важная веха, означающая, что мы, как минимум, создали стабильный API.

Julia 1.0 будет предлагаться по лицензии МТИ, верно?

Да. Базовая часть доступна по лицензии МТИ, очень либеральной.

Почему язык был назван Julia?

Об этом всегда спрашивают. Особой причины не было, просто нам понравилось это имя.