Julia (язык программирования)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Julia
Julia (programming language) logo.png
Класс языка:

мультипарадигмальный: процедурный, на основе мультиметодов, функциональный, мета

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

компилируемый (JIT)

Появился в:

2009

Автор(ы):

Стефан Карпински,
Джефф Безансон,
Вирал Шах

Расширение файлов:

.jl

Выпуск:

0.3.0 (20 августа 2014 г.)

Тестовая версия:

pre-1.0

Система типов:

динамический с опциональными аннотациями типов[en] и выводом типов

Испытал влияние:

Си, NumPy, Matlab, R, Scheme, Lisp, Python, Perl, Ruby

Лицензия:

Лицензия MIT

Сайт:

julialang.org

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

Описание языка[править | править вики-текст]

Язык является динамическим, однако использует JIT-компиляцию. Благодаря этому достигается высокая скорость работы приложений, написанных на «чистом» языке, без использования низкоуровневых библиотек и векторных операций. Поддерживается перегрузка функций и операторов (которые фактически также является функциями), при этом опционально можно указывать тип для аргументов функции, чего обычно нет в динамически типизируемых языках. Это позволяет создавать специализированные варианты функций и операторов для ускорения вычислений. Наиболее подходящий вариант функции выбирается автоматически в процессе выполнения. Также благодаря перегрузке операторов можно создавать новые типы данных, которые ведут себя подобно встроенным типам.

Одним из приоритетных направлений в развитии языка является поддержка распределённых вычислений. Присутствует большое количество стандартных конструкций для распараллеливания кода.

История создания[править | править вики-текст]

Обсуждение необходимости создания нового языка началось в августе 2009 года. Стефан Карпински, к тому времени поработавший с математическим пакетом Matlab и языком программирования R, испытывал неудовлетворённость их ограничениями. И после того, как Вирал Шах познакомил его с Джеффом Безансоном, все трое принялись обсуждать концепцию нового языка. Для выбора женского имени в качестве названия языка, как пояснял в интервью ведущий разработчик языка Стефан Карпински, «особой причины не было», разработчикам просто «понравилось это имя»[3]. Первая открытая версия была опубликована в феврале 2012.[5][6]

Идеология[править | править вики-текст]

Основной задачей при создании была разработка универсального языка, способного работать с большим объёмом вычислений и при этом гарантировать максимальную производительность. Поскольку большой объём вычислений выполняется именно в облачных средах, то в языке была сразу реализована поддержка облаков и параллельного программирования как замена механизму MPI[3].

В языке была изначально реализована модель построения больших параллельных приложений, основанная на глобальном распределенном адресном пространстве. Такая модель подразумевает возможность производить операции (в том числе и их передачу между между машинами) со ссылкой на объект, расположенный на другой машине, также участвующей в вычислениях. Этот механизм позволяет отслеживать какие вычисления на каких системах выполняются, а также подключать к производимым вычислениям новые машины[3].

Примеры кода[править | править вики-текст]

Пример функции:

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[7].

Для реализации своей идеи Бойер использовал серверную часть, написанную на языке Julia, которая при помощи специального менеджера сессий протокола SCGI взаимодействует с веб-сервером на базе lighttpd. Подобный подход позволил довольно несложным путем реализовать концепцию REPL, обладающую следующими возможностями: построение графиков на основе вычислений функций, одномерных массивов и наборов точек любого числового типа; удобство работы со средой (автоматическое определение размера окон и т. д.); расширяемость и кросс-платформенность между браузерами. Функции для построения графиков в такой среде могут задаваться несколькими способами:

plot(sin, -pi, pi)

или

plot([0.0, 0.1, 0.4, 0.3, 0.4])

[7].

Инструменты[править | править вики-текст]

Julia Studio — это интегрированная среда разработки для Julia.[8]

Примечания[править | править вики-текст]

  1. The Julia Language. Архивировано из первоисточника 24 мая 2013.
  2. Bryant, Avi Matlab, R, and Julia: Languages for data analysis. O'Reilly Strata (Oct 2012). Проверено 7 февраля 2013. Архивировано из первоисточника 24 мая 2013.
  3. 1 2 3 4 Пол Крил. Ученым предлагается альтернатива Си — язык Julia. «Открытые системы» (27 апреля 2012). Проверено 27 апреля 2012. Архивировано из первоисточника 14 сентября 2012. (оригинал Krill, Paul New Julia language seeks to be the C for scientists. InfoWorld. Проверено 7 февраля 2013. Архивировано из первоисточника 24 мая 2013.)
  4. Julia: A Fast Dynamic Language for Technical Computing (PDF) (2012). Архивировано из первоисточника 24 мая 2013.
  5. Why We Created Julia (Feb 2012). Проверено 7 февраля 2013. Архивировано из первоисточника 24 мая 2013.
  6. Mark, Gibbs Gear head. Network World (2013‐1‐9). Проверено 7 февраля 2013. Архивировано из первоисточника 24 мая 2013.
  7. 1 2 Stephan Boyer. A Graphical Front End for the Julia Programming Language (англ.). Массачусетский технологический институт (December 2011). Проверено 23 июля 2012. Архивировано из первоисточника 14 сентября 2012.
  8. The Julia Studio. Архивировано из первоисточника 24 мая 2013.

Ссылки[править | править вики-текст]