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

Julia высокоуровневый свободный язык программирования с динамической типизацией , созданный для математических вычислений. Эффективен также и для написания программ общего назначения. Синтаксис языка схож с синтаксисом других математических языков (например, MATLAB и Octave ), однако имеет некоторые существенные отличия. Julia написан на Си , C++ и Scheme . Имеет встроенную поддержку многопоточности и распределённых вычислений, реализованные в том числе в стандартных конструкциях.

Язык является динамическим, при этом поддерживает JIT-компиляцию (JIT-компилятор на основе LLVM входит в стандартный комплект), благодаря чему, по утверждению авторов языка, приложения, полностью написанные на языке (без использование низкоуровневых библиотек и векторных операций) практически не уступают в производительности приложениям, написанным на статически компилируемых языках, таких как Си или C++ . Большая часть стандартной библиотеки языка написана на нём же .

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

История

В 2009 году ( ) , , начали обсуждать концепцию нового языка для преодоления ограничений математического пакета Matlab и языка « R ». Для выбора имени нового языка, как пояснял ведущий разработчик Стефан Карпински, «особой причины не было», разработчикам просто «понравилось это имя» . Первая открытая версия была опубликована в феврале 2012 .

Идеология

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

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

Ключевые особенности языка

Примеры

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

function mandel(z; maxiter = 80)
    c = z
    for n = 1:maxiter
        abs(z) > 2 && return n-1
        z = z^2 + c
    end
    maxiter
end

function randmatstat(t)
    n = 5
    w = v = 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 .

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

plot(sin, -pi, pi)  % или plot([0.0, 0.1, 0.4, 0.3, 0.4])

Julia Studio — первая настольная интегрированная среда разработки для Julia , впоследствии её заменила среда Juno , являющаяся надстройкой над текстовым редактором Atom . Поддерживают джулию также Geany , Jupyter , JuliaDT ( Eclipse plugin) и др.

Примечания

  1. — .
  2. — .
  3. . Архивировано из 24 мая 2013 года.
  4. Bryant, Avi . O'Reilly Strata (Oct 2012). Дата обращения: 7 февраля 2013. Архивировано из 24 мая 2013 года.
  5. Пол Крил. . « Открытые системы » (27 апреля 2012). Дата обращения: 27 апреля 2012. Архивировано из 13 сентября 2012 года. (оригинал Krill, Paul . InfoWorld. Дата обращения: 7 февраля 2013. Архивировано из 24 мая 2013 года. )
  6. ( PDF ) (2012). Архивировано из 24 мая 2013 года.
  7. (Feb 2012). Дата обращения: 7 февраля 2013. Архивировано из 24 мая 2013 года.
  8. Mark, Gibbs . Network World (2013‐1‐9). Дата обращения: 7 февраля 2013. Архивировано из 24 мая 2013 года.
  9. Stephan Boyer. (англ.) . Массачусетский технологический институт (декабрь 2011). Дата обращения: 23 июля 2012. Архивировано из 13 сентября 2012 года.
  10. . Архивировано из 24 мая 2013 года.
  11. . Дата обращения: 5 июля 2015. 10 октября 2016 года.

Литература

  • Bruce Tate, Fred Daoud, Jack Moffitt, Ian Dees. Julia // Seven More Languages in Seven Weeks. Languages That Are Shaping the Future. — The Pragmatic Bookshelf, 2015. — С. 171—207. — 320 с. — ISBN 978-1941222157 .

Ссылки

  • — официальный сайт Julia
  • на сайте GitHub
Источник —

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