На предстоящей (http://llvm.org/devmtg/2012-04-12/) европейской конференции проекта LLVM (http://llvm.org/) в Лондоне будет (http://permalink.gmane.org/gmane.comp.compilers.llvm.devel/4... официально представлен новый язык программирования Julia (http://julialang.org/), использующий JIT-компилятор на базе наработок проекта LLVM (http://llvm.org/). Julia является динамическим языком высокого уровня с открытым исходным кодом (https://github.com/JuliaLang/julia) (лицензия MIT), нацеленный прежде всего на техническое программирование в статистико-математических областях, с областью применения аналогичной таким известным решениям, как Matlab, язык R и связка из Python и NumPy.
Julia мультипарадигменный язык, который может комбинировать разные стили программирования, такие как императивный, объектно-ориентированный и функциональный. Синтаксис Julia очень близок к синтаксису MATLAB. По мнению создателей этого языка, к его достоинствам также следует отнести множество заимствований из синтаксиса Ruby и Lisp, удобная работа со строками в стиле Perl, кроме того обеспечена очень гибкая встроенная поддержка Hadoop (http://hadoop.apache.org/). Уже идет работа по реализации полиморфных функций, поддержки задействования GPU для ускорения вычислений, автовектаризации и прочего.
Отдельно следует подчеркнуть, что язык Julia изначально спроектирован с учетом поддержки параллельного программирования (http://julialang.org/manual/parallel-computing/) (например, реализованы так называемые Coroutines (http://en.wikipedia.org/wiki/Coroutine)), поэтому эта среда очень хорошо подходит для таких актуальных сегодня областей, как виртуализация и облачные вычисления, практическая работа со стороны разработчиков языка по экспериментированию в этих областях уже начата.
Если же попытаться выделить основные новшества и отличия этого языка от ему подобных, то в качестве первого важного отличия Julia следует отметить его сильный акцент на производительности, больше сопоставимой по своим характеристикам с языком С, а также полная открытость технологии для сообщества.
<center><img src="http://www.opennet.ru/opennews/pics_base/0_1331397508.png" style="border-style: solid; border-color: #000000; border-width: 1px;" title="" border=0></center>
Ещё одна важная особенность Julia - язык исповедует (http://julialang.org/manual/calling-c-and-fortran-code/) "безшаблонную" философию: внешние функции могут вызываться из Julia напрямую без какого-либо "кода для сопряжения" параметров вызова и библиотеки, и это можно делать не только из скомпилированного кода программы на Julia, но даже из интерактивной командной строки. Единственное ограничение для такого подхода - библиотеки с вызываемыми функциями должны быть представлены в виде "
"разделяемой библиотеки". Впрочем, большинство библиотек для C или Fortran'a распространяются как раз именно в таком виде. Машинные инструкции, которые генерирует JIT-компилятор (http://en.wikipedia.org/wiki/Just-in-time_compilation) Julia в этом вызове - полностью аналогичны тому коду, который сгенерировал бы C-компилятор, поэтому накладные расходы от вызова внешней функции из Julia здесь почти такие же, как и в C. В этой области возможно ещё множество оптимизаций, которые будут реализованы в этом языке в ближайшем будущем.
Другие интересные особенности этого нового динамического языка:
- Ядро языка очень невелико, его стандартная библиотека включает минимальный набор примитивных операций, такие как например арифметические операции, т.е. гибкая масштабируемость языка;
- Богатый язык типов для описания и конструирования объектов;
- Возможность определять поведение функции при передачи разного количества аргументов через multiple dispatch (http://en.wikipedia.org/wiki/Multiple_dispatch);
- Автоматическая генерация максимально эффективного кода для разных типов аргументов и переменных;
- Полная поддержка Unicode;
- Мощные шелл-подобные функции для запуска и управления внешними программами и процессами.
URL: http://permalink.gmane.org/gmane.comp.compilers.llvm.devel/4...
Новость: http://www.opennet.ru/opennews/art.shtml?num=33315