Джулия (язык программирования)

Джулия (язык программирования)
Джулия
Класс языка:

процедурный

Тип исполнения:

компилируемый (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(sin, -pi, pi)

или

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.

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "Джулия (язык программирования)" в других словарях:

  • Два веронца — The Two Gentlemen of Verona …   Википедия

  • Отелло — У этого термина существуют и другие значения, см. Отелло (значения). Отелло, венецианский мавр The Tragedy of Othello, The Moor of Venice …   Википедия

  • Ромео и Джульетта — У этого термина существуют и другие значения, см. Ромео и Джульетта (значения). Ромео и Джульетта Romeo and Juliet …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»