Джулия (язык программирования) | это... Что такое Джулия (язык программирования)? (original) (raw)
У этого термина существуют и другие значения, см. Джулия.
Джулия
Класс языка: | процедурный |
---|---|
Тип исполнения: | компилируемый (JIT) |
Появился в: | 2009 |
Автор(ы): | Стефан Карпински,Джефф Безансон,Вирал Шах |
Расширение файлов: | .j |
Релиз: | pre-1.0 |
Типизация данных: | динамическая |
Испытал влияние: | Си, NumPy, Matlab, R |
Лицензия | Лицензия MIT |
Сайт: | http://julialang.org/ |
Джулия (англ. Julia) — высокоуровневый высокопроизводительный свободный язык программирования с динамической типизацией, созданный для математических вычислений. Синтаксис языка схож с синтаксисом других математических языков (например, MATLAB и Octave), однако имеет некоторые существенные отличия. В стандартный комплект входит JIT-компилятор на основе LLVM, благодаря чему приложения, полностью написанные на Джулии, практически не уступают в производительности приложениям, написанным на статически компилируемых языках вроде Си/Си++[1]. Большая часть стандартной библиотеки языка написана на нём же. Также язык имеет встроенную поддержку большого числа команд для распределенных вычислений.
Содержание
- 1 Описание языка
- 2 История создания
- 3 Идеология
- 4 Примеры кода
- 5 Графическая реализация
- 6 См. также
- 7 Примечания
- 8 Ссылки
Описание языка
Язык является динамическим, однако использует JIT-компиляцию. Благодаря этому достигается высокая скорость работы приложений, написанных на «чистом» языке, без использования низкоуровневых библиотек и векторных операций. Поддерживается перегрузка функций и операторов (которые фактически также является функциями), при этом опционально можно указывать тип для аргументов функции, чего обычно нет в динамически типизируемых языках. Это позволяет создавать специализированные варианты функций и операторов для ускорения вычислений. Наиболее подходящий вариант функции выбирается автоматически в процессе выполнения. Также благодаря перегрузке операторов можно создавать новые типы данных, которые ведут себя подобно встроенным типам.
Одним из приоритетных направлений в развитии языка является поддержка распределенных вычислений. Присутствует большое количество стандартных конструкций для легкого распараллеливания кода.
История создания
Обсуждение необходимости создания нового языка началось в августе 2009 года. Стефан Карпински, к тому времени поработавший с математическим пакетом Matlab и языком программирования R для вычислений линейной алгебры и статистических методов, испытывал неудовлетворённость их ограничениями. И после того, как Вирал Шах познакомил его Джеффом Безансоном все трое принялись обсуждать концепцию нового языка. Для выбора женского имени в качестве названия языка, как пояснял в интервью ведущий разработчик языка Стефан Карпински, «особой причины не было», разработчикам просто «понравилось это имя»[2].
Идеология
Основной идеей при создании языка «Джулия» была разработка универсального языка, способного работать с большим объёмом вычислений и при этом гарантировать максимальную продуктивность. Для реализации этой идеи «Джулия» была создана как «динамический язык, обеспечивающий относительную простоту написания кода и реализующий очень простую модель программирования». Поскольку большой объем вычислений выполняется именно в облачных средах, то в языке была сразу реализована поддержка облаков и параллельного программирования как замена механизму MPI[2].
В языке была изначально реализована модель построения больших параллельных приложений, основанная на глобальном распределенном адресном пространстве. Такая модель подразумевает возможность производить операции (в том числе и их передачу между между машинами) со ссылкой на объект, расположенный на другой машине, такжке участвующей в вычислениях. Этот механизм позволяет отслеживать какие вычисления на каких системах выполняются, а также подключать к производимым вычислениям новые машины[2].
Примеры кода
Пример функции:
function mandel(z) c = z maxiter = 80 for n = 1:maxiter if abs(z) > 2 return n-1 end z = z^2 + c end return maxiter end
function randmatstat(t) n = 5 v = zeros(t) w = zeros(t) for i = 1:t a = randn(n,n) b = randn(n,n) c = randn(n,n) d = randn(n,n) P = [a b c d] Q = [a b; c d] v[i] = trace((P.'*P)^4) w[i] = trace((Q.'*Q)^4) end std(v)/mean(v), std(w)/mean(w) end
Пример параллельного вычисления 100.000.000 результатов случайного подбрасывания монеты:
nheads = @parallel (+) for i=1:100000000 randbit() end
Графическая реализация
В декабре 2011 года Стефан Бойер предложил идею графической реализации языка, которая облегчит работу с ним математикам и другим учёным, не обладающими навыками программирования и работы с утилитами ОС UNIX. Идея Бойера заключалась в переходе от отправки команд вычислительному кластеру к простой работе с браузером. При этом, клиентская часть, реализующая в том числе и графический интерфейс и платформу для построения графиков, может быть реализована при помощи таких современных (на тот момент) технологий как HTML5, SVG и AJAX[3].
Для реализации своей идеи Бойер использовал серверную часть, написанную на языке «Джулия», которая при помощи специального менеджера сессий протокола SCGI взаимодействует с веб-сервером на базе lighttpd. Подобный подход позволил довольно несложным путем реализовать концепцию REPL, обладающую следующими возможностями: построение графиков на основе вычислений функций, одномерных массивов и наборов точек любого числового типа; удобство работы со средой (автоматическое определение размера окон и т. д.); расширяемость и кросс-платформенность между браузерами. Функции для построения графиков в такой среде могут задаваться несколькими способами:
или
plot([0.0, 0.1, 0.4, 0.3, 0.4])
[3].
См. также
- MATLAB
- Scilab
- FreeMat
- GNU Octave
- Simulink
- Stateflow
- Mathematica
Примечания
- ↑ The Julia Language
- ↑ 1 2 3 Пол Крил Ученым предлагается альтернатива Си — язык Julia. «Открытые системы» (27 апреля 2012). Архивировано из первоисточника 14 сентября 2012. Проверено 27 апреля 2012.
- ↑ 1 2 Stephan Boyer A Graphical Front End for the Julia Programming Language (англ.). Массачусетский технологический институт (December 2011). Архивировано из первоисточника 14 сентября 2012. Проверено 23 июля 2012.
Ссылки
Системы компьютерной алгебры | |
---|---|
Retail | ClassPad Manager • LiveMath • Magma • Maple • Mathcad • Mathematica • MuPAD • TI InterActive! |
Свободные | Axiom • CoCoA • GAP • GiNaC • Macaulay2 • Mathomatic • Maxima • OpenAxiom • PARI/GP • Reduce • Sage • SINGULAR • SymPy • Xcas • Yacas |
Бесплатные/shareware | Fermat • KANT |
Discontinued | CAMAL • Derive • Macsyma • muMATH |
Категория • Сравнение |
Математическое программное обеспечение | |
---|---|
Open source | Символьные вычисления: Axiom • GAP • Maxima • ; Численные вычисления: Fityk • FreeMat • GNU Octave • gretl • LabPlot • QtiPlot • R • Sage • SciDAVis • Scilab • |
Proprietary | Символьные вычисления: Mathcad • Maple • Mathematica • SMath Studio ; Численные вычисления: GAUSS • LabVIEW • MagicPlot • MATLAB • Origin • SigmaPlot • Speakeasy • VisSim |