Julia (язык программирования)
Julia | |
---|---|
Изображение логотипа | |
Класс языка | мультипарадигмальный: процедурный, на основе мультиметодов, функциональный, мета |
Тип исполнения | компилируемый (JIT) |
Появился в | 2012 |
Автор |
Стефан Карпински, Джефф Безансон, Вирал Шах |
Разработчик | см. Julia . GitHub. |
Расширение файлов |
.jl |
Выпуск | 0.4.0 (8 октября 2015 г.[1]) |
Тестовая версия | 0.5.0-dev (обновляется ежедневно) |
Система типов | динамический с опциональными аннотациями типов и выводом типов |
Испытал влияние | Си, NumPy, Matlab, R, Scheme, Lisp, Python, Perl, Ruby |
Лицензия | Лицензия MIT |
Сайт | julialang.org |
ОС | Linux, Windows[2] и macOS[2] |
Медиафайлы на Викискладе |
Julia — высокоуровневый высокопроизводительный свободный язык программирования с динамической типизацией, созданный для математических вычислений. Эффективен также и для написания программ общего назначения.[3][4][5] Синтаксис языка схож с синтаксисом других математических языков (например, MATLAB и Octave), однако имеет некоторые существенные отличия. Julia написана на Си, C++ и Scheme. В стандартный комплект входит JIT-компилятор на основе LLVM, благодаря чему, по утверждению авторов языка, приложения, полностью написанные на языке, практически не уступают в производительности приложениям, написанным на статически компилируемых языках вроде Си или C++[5]. Большая часть стандартной библиотеки языка написана на нём же.[6] Также язык имеет встроенную поддержку большого числа команд для распределенных вычислений.
Описание языка
Язык является динамическим, однако использует JIT-компиляцию. Благодаря этому достигается высокая скорость работы приложений, написанных на «чистом» языке, без использования низкоуровневых библиотек и векторных операций. Поддерживается перегрузка функций и операторов (которые фактически также являются функциями), при этом опционально можно указывать тип для аргументов функции, чего обычно нет в динамически типизируемых языках. Это позволяет создавать специализированные варианты функций и операторов для ускорения вычислений. Наиболее подходящий вариант функции выбирается автоматически в процессе выполнения. Также благодаря перегрузке операторов можно создавать новые типы данных, которые ведут себя подобно встроенным типам.
Одним из приоритетных направлений в развитии языка является поддержка распределённых вычислений. Присутствует большое количество стандартных конструкций для распараллеливания кода.
История создания
Обсуждение необходимости создания нового языка началось в августе 2009 года. Стефан Карпински, к тому времени поработавший с математическим пакетом Matlab и языком программирования R, испытывал неудовлетворённость их ограничениями. И после того, как Вирал Шах познакомил его с Джеффом Безансоном, все трое принялись обсуждать концепцию нового языка. Для выбора женского имени в качестве названия языка, как пояснял в интервью ведущий разработчик языка Стефан Карпински, «особой причины не было», разработчикам просто «понравилось это имя»[5]. Первая открытая версия была опубликована в феврале 2012.[7][8]
Идеология
Основной задачей при создании была разработка универсального языка, способного работать с большим объёмом вычислений и при этом гарантировать максимальную производительность. Поскольку большой объём вычислений выполняется именно в облачных средах, то в языке была сразу реализована поддержка облаков и параллельного программирования как замена механизму MPI[5].
В языке была изначально реализована модель построения больших параллельных приложений, основанная на глобальном распределенном адресном пространстве. Такая модель подразумевает возможность производить операции (в том числе и их передачу между машинами) со ссылкой на объект, расположенный на другой машине, также участвующей в вычислениях. Этот механизм позволяет отслеживать какие вычисления на каких системах выполняются, а также подключать к производимым вычислениям новые машины[5].
Возможности Julia
Ссылаясь на официальный сайт, основные возможности языка:
- Мультиметод: обеспечивает возможность определять поведение функции в зависимости от типа передаваемых аргументов
- Динамическая типизация
- Хорошая производительность, сравнимая со статически типизированными языками как C
- Встроенная Система управления пакетами
- Макросы и другие возможности метапрограммирования
- Вызов Python функций при помощи PyCall
- Вызов C функций напрямую: без дополнительных надстроек и API
- Богатые возможности для управления другими процессами
- Разрабатывался для параллельных и распределенных вычислений
- Сопрограммы: легковесные зеленые потоки (green threads)
- Возможность определять дополнительные типы не уступающие в скорости и удобстве встроенным
- Элегантные и расширяемые преобразования для числовых и других типов
- Поддержка Юникода, включающая, но не ограничиваемая только UTF-8
Примеры кода
Пример функции:
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[9].
Для реализации своей идеи Бойер использовал серверную часть, написанную на языке Julia, которая при помощи специального менеджера сессий протокола SCGI взаимодействует с веб-сервером на базе lighttpd. Подобный подход позволил довольно несложным путем реализовать концепцию REPL, обладающую следующими возможностями: построение графиков на основе вычислений функций, одномерных массивов и наборов точек любого числового типа; удобство работы со средой (автоматическое определение размера окон и т. д.); расширяемость и кросс-платформенность между браузерами. Функции для построения графиков в такой среде могут задаваться несколькими способами:
plot(sin, -pi, pi)
или
plot([0.0, 0.1, 0.4, 0.3, 0.4])
[9].
Инструменты
Julia Studio — это интегрированная среда разработки для Julia.[10] В настоящее время её заменила среда Juno[11], являющаяся надстройкой над Light Table.
Примечания
- ↑ Release Release 0.4.0 · JuliaLang/julia · GitHub
- ↑ 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. Архивировано 14 сентября 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. Архивировано 14 сентября 2012 года.
- ↑ The Julia Studio . Архивировано 24 мая 2013 года.
- ↑ Juno, the Innteractive Development Environment
Литература
- 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. — ISBN 978-1941222157.
- Ivo Balbaert. Getting started with Julia Programming Language. — Packt Publishing, Feb. 2015. — 159 p. — ISBN 978-1783284795.
- Анатолий Левенчук. Об Julia language . trust.ua (8 февраля 2015). Дата обращения: 5 июля 2015..
Ссылки
- julialang.org — официальный сайт Julia
- Страница проекта на GitHub
Для улучшения этой статьи желательно:
|
- Языки программирования по алфавиту
- Языки программирования, появившиеся в 2012 году
- Программы математического моделирования
- Программное обеспечение для OS X
- Программное обеспечение для Windows
- Программное обеспечение для Linux
- Предметно-ориентированные языки программирования
- Системы компьютерной алгебры
- Численные методы линейной алгебры