Джулия (язык программирования) | это... Что такое Джулия (язык программирования)? (original) (raw)

У этого термина существуют и другие значения, см. Джулия.

Джулия

Класс языка: процедурный
Тип исполнения: компилируемый (JIT)
Появился в: 2009
Автор(ы): Стефан Карпински,Джефф Безансон,Вирал Шах
Расширение файлов: .j
Релиз: pre-1.0
Типизация данных: динамическая
Испытал влияние: Си, NumPy, Matlab, R
Лицензия Лицензия MIT
Сайт: http://julialang.org/

Джулия (англ. Julia) — высокоуровневый высокопроизводительный свободный язык программирования с динамической типизацией, созданный для математических вычислений. Синтаксис языка схож с синтаксисом других математических языков (например, MATLAB и Octave), однако имеет некоторые существенные отличия. В стандартный комплект входит JIT-компилятор на основе LLVM, благодаря чему приложения, полностью написанные на Джулии, практически не уступают в производительности приложениям, написанным на статически компилируемых языках вроде Си/Си++[1]. Большая часть стандартной библиотеки языка написана на нём же. Также язык имеет встроенную поддержку большого числа команд для распределенных вычислений.

Содержание

Описание языка

Язык является динамическим, однако использует 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].

См. также

Примечания

  1. The Julia Language
  2. 1 2 3 Пол Крил Ученым предлагается альтернатива Си — язык Julia. «Открытые системы» (27 апреля 2012). Архивировано из первоисточника 14 сентября 2012. Проверено 27 апреля 2012.
  3. 1 2 Stephan Boyer A Graphical Front End for the Julia Programming Language (англ.). Массачусетский технологический институт (December 2011). Архивировано из первоисточника 14 сентября 2012. Проверено 23 июля 2012.

Ссылки

Просмотр этого шаблона Системы компьютерной алгебры
Retail ClassPad Manager • LiveMath • Magma • MapleMathcadMathematica • 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 Символьные вычисления: AxiomGAPMaxima • ; Численные вычисления: FitykFreeMatGNU OctavegretlLabPlotQtiPlotRSageSciDAVisScilab
Proprietary Символьные вычисления: MathcadMapleMathematicaSMath Studio ; Численные вычисления: GAUSSLabVIEWMagicPlotMATLABOriginSigmaPlot • Speakeasy • VisSim
Просмотр этого шаблона Основные языки программирования (сравнениеIDEисторияхронология)
Используемыев разработке АдаAPLЯзык ассемблераActionScriptABAP/4AutoItAWKБейсикСиКоболC++C#ClarionClojureColdFusionCommon LispDdBaseDelphiEiffelErlangEuphoriaF#ФортФортранGambasGoGroovy • HAL/S • HaskellIconJavaJavaScriptLimboLuaМодула-3Object PascalObjective-COCamlOzParserПаскальКомпонентный ПаскальPerlPHPPowerBASICPythonПЛ/1ПрологRubyScalaSchemeSmalltalkSQLPL/SQLTclValaVisual Basic (.NET)
Академические AgdaCleanCurryЛогоMLРЕФАЛСимулаОберон
IEC 61131-3 Instruction ListSTFBDLadder Diagram (LD) • SFC
Прочие АлголАлгол 68Модула-2МирандаHope
Эзотерические HQ9+/HQ9++ • INTERCALBrainfuck • Brainfork • BefungeMalbolgePietSpoonUnlambdaWhitespaceFALSELOLCODE
Визуальные G (LabVIEW) • Microsoft VPLSikuliVisSimАлисаДРАКОНСкретч