На предстоящей [4] европейской конференции проекта LLVM [5] в Лондоне будет [6] официально представлен новый язык программирования Julia [7], использующий JIT-компилятор на базе наработок проекта LLVM [5]. Julia является динамическим языком высокого уровня с открытым исходным кодом [8] (лицензия MIT), нацеленный прежде всего на техническое программирование в статистико-математических областях, с областью применения аналогичной таким известным решениям, как Matlab, язык R и связка из Python и NumPy.
Julia мультипарадигменный язык, который может комбинировать разные стили программирования, такие как императивный, объектно-ориентированный и функциональный. Синтаксис Julia очень близок к синтаксису MATLAB. По мнению создателей этого языка, к его достоинствам также следует отнести множество заимствований из синтаксиса Ruby и Lisp, удобная работа со строками в стиле Perl, кроме того обеспечена очень гибкая встроенная поддержка Hadoop [9]. Уже идет работа по реализации полиморфных функций, поддержки задействования GPU для ускорения вычислений, автовекторизации и прочего.
Отдельно следует подчеркнуть, что язык Julia изначально спроектирован с учетом поддержки параллельного программирования [10] (например, реализованы так называемые Coroutines [11]), поэтому эта среда очень хорошо подходит для таких актуальных сегодня областей, как виртуализация и облачные вычисления, практическая работа со стороны разработчиков языка по экспериментированию в этих областях уже начата.
Если же попытаться выделить основные новшества и отличия этого языка от ему подобных, то в качестве первого важного отличия Julia следует отметить его сильный акцент на производительности, больше сопоставимой по своим характеристикам с языком С, а также полная открытость технологии для сообщества.
Ещё одна важная особенность Julia - язык исповедует [12] "бесшаблонную" философию: внешние функции могут вызываться из Julia напрямую без какого-либо "кода для сопряжения" параметров вызова и библиотеки, и это можно делать не только из скомпилированного кода программы на Julia, но даже из интерактивной командной строки. Единственное ограничение для такого подхода - библиотеки с вызываемыми функциями должны быть представлены в виде "разделяемой библиотеки". Впрочем, большинство библиотек для C или Fortran'a распространяются как раз именно в таком виде. Машинные инструкции, которые генерирует JIT-компилятор [13] Julia в этом вызове - полностью аналогичны тому коду, который сгенерировал бы C-компилятор, поэтому накладные расходы от вызова внешней функции из Julia здесь почти такие же, как и в C. В этой области возможно ещё множество оптимизаций, которые будут реализованы в этом языке в ближайшем будущем.
Другие интересные особенности этого нового динамического языка:
Ссылки:
[1] http://htfl.ru/cat-news-julia
[2] http://htfl.ru/cat-news-novosti
[3] http://htfl.ru/cat-news-yazyki-programirovaniya
[4] /out.php?link=http://llvm.org/devmtg/2012-04-12/
[5] /out.php?link=http://llvm.org/
[6] /out.php?link=http://permalink.gmane.org/gmane.comp.compilers.llvm.devel/48154
[7] /out.php?link=http://julialang.org/
[8] /out.php?link=https://github.com/JuliaLang/julia
[9] /out.php?link=http://hadoop.apache.org/
[10] /out.php?link=http://julialang.org/manual/parallel-computing/
[11] /out.php?link=http://en.wikipedia.org/wiki/Coroutine
[12] /out.php?link=http://julialang.org/manual/calling-c-and-fortran-code/
[13] /out.php?link=http://en.wikipedia.org/wiki/Just-in-time_compilation
[14] /out.php?link=http://en.wikipedia.org/wiki/Multiple_dispatch