Julia — высокоуровневый свободный язык программирования с динамической типизацией, созданный для математических вычислений. Эффективен также и для написания программ общего назначения.[6][7][8] Синтаксис языка схож с синтаксисом других математических языков (например, MATLAB и Octave), однако имеет некоторые существенные отличия. Julia написан на Си, C++ и Scheme. Имеет встроенную поддержку многопоточности и распределённых вычислений, реализованные в том числе в стандартных конструкциях.
Julia | |
---|---|
![]() | |
Класс языка | объектно-ориентированный, функциональный, векторный язык программирования[вд], мультипарадигмальный, императивный и интерпретируемый |
Появился в | 23 августа 2009[2][3] |
Автор | Джефф Безансон[вд], Алан Эдельман[вд], Стефан Карпински[вд] и Вирал Шах[вд] |
Разработчик | Джефф Безансон[вд], Стефан Карпински[вд], Алан Эдельман[вд] и Вирал Шах[вд] |
Расширение файлов |
.jl [4] |
Выпуск | |
Испытал влияние | MATLAB |
Сайт | julialang.org (англ.) |
ОС | Linux, Windows[5] и macOS[5] |
![]() |
Язык является динамическим, при этом поддерживает JIT-компиляцию (JIT-компилятор на основе LLVM входит в стандартный комплект), благодаря чему, по утверждению авторов языка, приложения, полностью написанные на языке (без использования низкоуровневых библиотек и векторных операций) практически не уступают в производительности приложениям, написанным на статически компилируемых языках, таких как Си или C++[8]. Большая часть стандартной библиотеки языка написана на нём же[9].
Поддерживается перегрузка функций и операторов (которые фактически также являются функциями), при этом опционально можно указывать тип для аргументов функции, чего обычно нет в динамически типизируемых языках. Это позволяет создавать специализированные варианты функций и операторов для ускорения вычислений. Наиболее подходящий вариант функции выбирается автоматически в процессе выполнения. Также благодаря перегрузке операторов можно создавать новые типы данных, которые ведут себя подобно встроенным типам.
История
правитьВ 2009 году Стефан Карпински (Stefan Karpinski), Вирал Шах, Джефф Безансон начали обсуждать концепцию нового языка для преодоления ограничений математического пакета Matlab и языка «R». Для выбора имени нового языка, как пояснял ведущий разработчик Стефан Карпински, «особой причины не было», разработчикам просто «понравилось это имя»[8]. Первая открытая версия была опубликована в феврале 2012[10][11].
Идеология
правитьОсновной задачей при создании была разработка универсального языка, способного работать с большим объёмом вычислений и при этом гарантировать максимальную производительность. Поскольку большой объём вычислений выполняется именно в облачных средах, то в языке была сразу реализована поддержка облаков и параллельного программирования как замена механизму MPI[8].
В языке была изначально реализована модель построения больших параллельных приложений, основанная на глобальном распределенном адресном пространстве. Такая модель подразумевает возможность производить операции (в том числе и их передачу между машинами) со ссылкой на объект, расположенный на другой машине, также участвующей в вычислениях. Этот механизм позволяет отслеживать, какие вычисления на каких системах выполняются, а также подключать к производимым вычислениям новые машины[8].
Ключевые особенности языка
править- мультиметод: обеспечивает возможность определять поведение функции в зависимости от типа передаваемых аргументов;
- динамическая типизация (опциональная возможность явного указания типов);
- производительность, сравнимая со статически типизированными языками, такими как Си;
- встроенная система управления пакетами;
- макросы и другие возможности метапрограммирования;
- вызов Python-функций при помощи PyCall
- вызов си-функций напрямую: без дополнительных надстроек и API;
- богатые возможности для управления другими процессами;
- поддержка параллельных и распределённых вычислений;
- сопрограммы: легковесные зелёные потоки;
- возможность определять дополнительные типы, не уступающие в скорости и удобстве встроенным;
- удобные и расширяемые преобразования для числовых и других типов;
- поддержка Юникода, включающая UTF-8 (но не ограничивающаяся им);
- все библиотеки Julia — это модули, модули объединяют в пакеты (для управления пакетами есть модуль «Pkg»), для каждого пакета есть файл проекта «Project.toml» с описанием проекта и зависимостей в формате «.toml».
Примеры
правитьПример функции:
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[12].
Для реализации своей идеи Бойер использовал серверную часть, написанную на языке Julia, которая при помощи специального менеджера сессий протокола SCGI взаимодействует с веб-сервером на базе lighttpd. Подобный подход позволил довольно несложным путём реализовать концепцию REPL, обладающую следующими возможностями: построение графиков на основе вычислений функций, одномерных массивов и наборов точек любого числового типа; удобство работы со средой (автоматическое определение размера окон и так далее); расширяемость и кросс-платформенность между браузерами. Функции для построения графиков в такой среде могут задаваться несколькими способами:[12]
plot(sin, -pi, pi) % или plot([0.0, 0.1, 0.4, 0.3, 0.4])
Julia Studio — первая настольная интегрированная среда разработки для Julia[13], впоследствии её заменила среда Juno[14], являющаяся надстройкой над текстовым редактором Atom. Поддерживают джулию также Geany, Jupyter, JuliaDT (Eclipse plugin) и др.
Примечания
править- ↑ Julia 1.11 Highlights (англ.) — 2024.
- ↑ LICENSE.md file in the JuliaLang/julia repository — GitHub Inc..
- ↑ Безансон Д. JuliaLang/julia - commit eb256df: "beginning work on parser" — GitHub Inc..
- ↑ http://fileformats.archiveteam.org/wiki/Julia
- ↑ 1 2 https://julialang.org/downloads/
- ↑ The Julia Language . Архивировано из оригинала 24 мая 2013 года.
- ↑ Bryant, Avi. Matlab, R, and Julia: Languages for data analysis . O'Reilly Strata (Oct 2012). Дата обращения: 7 февраля 2013. Архивировано из оригинала 24 мая 2013 года.
- ↑ 1 2 3 4 5 Пол Крил. Учёным предлагается альтернатива Си — язык Julia . «Открытые системы» (27 апреля 2012). Дата обращения: 27 апреля 2012. Архивировано из оригинала 13 сентября 2012 года. (оригинал Krill, Paul. New Julia language seeks to be the C for scientists . InfoWorld. Дата обращения: 7 февраля 2013. Архивировано из оригинала 24 мая 2013 года.)
- ↑ Julia: A Fast Dynamic Language for Technical Computing (PDF) (2012). Архивировано из оригинала 24 мая 2013 года.
- ↑ Why We Created Julia (Feb 2012). Дата обращения: 7 февраля 2013. Архивировано из оригинала 24 мая 2013 года.
- ↑ Mark, Gibbs. Gear head . Network World (2013‐1‐9). Дата обращения: 7 февраля 2013. Архивировано из оригинала 24 мая 2013 года.
- ↑ 1 2 Stephan Boyer. A Graphical Front End for the Julia Programming Language (англ.). Массачусетский технологический институт (декабрь 2011). Дата обращения: 23 июля 2012. Архивировано из оригинала 13 сентября 2012 года.
- ↑ The Julia Studio . Архивировано из оригинала 24 мая 2013 года.
- ↑ Juno, the Interactive Development Environment . Дата обращения: 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.
Ссылки
править- julialang.org — официальный сайт Julia
- Проект Julia (язык программирования) на сайте GitHub
Для улучшения этой статьи желательно: |