Julia (язык программирования)
Julia — высокоуровневый свободный язык программирования с динамической типизацией, созданный для математических вычислений. Эффективен также и для написания программ общего назначения.[6][7][8] Синтаксис языка схож с синтаксисом других математических языков (например, MATLAB и Octave), однако имеет некоторые существенные отличия. Julia написан на Си, C++ и Scheme. Имеет встроенную поддержку многопоточности и распределённых вычислений, реализованные в том числе в стандартных конструкциях. Язык является динамическим, при этом поддерживает JIT-компиляцию (JIT-компилятор на основе LLVM входит в стандартный комплект), благодаря чему, по утверждению авторов языка, приложения, полностью написанные на языке (без использования низкоуровневых библиотек и векторных операций) практически не уступают в производительности приложениям, написанным на статически компилируемых языках, таких как Си или C++[8]. Большая часть стандартной библиотеки языка написана на нём же[9]. Поддерживается перегрузка функций и операторов (которые фактически также являются функциями), при этом опционально можно указывать тип для аргументов функции, чего обычно нет в динамически типизируемых языках. Это позволяет создавать специализированные варианты функций и операторов для ускорения вычислений. Наиболее подходящий вариант функции выбирается автоматически в процессе выполнения. Также благодаря перегрузке операторов можно создавать новые типы данных, которые ведут себя подобно встроенным типам. ИсторияВ 2009 году Стефан Карпински (Stefan Karpinski), Вирал Шах, Джефф Безансон начали обсуждать концепцию нового языка для преодоления ограничений математического пакета Matlab и языка «R». Для выбора имени нового языка, как пояснял ведущий разработчик Стефан Карпински, «особой причины не было», разработчикам просто «понравилось это имя»[8]. Первая открытая версия была опубликована в феврале 2012[10][11]. ИдеологияОсновной задачей при создании была разработка универсального языка, способного работать с большим объёмом вычислений и при этом гарантировать максимальную производительность. Поскольку большой объём вычислений выполняется именно в облачных средах, то в языке была сразу реализована поддержка облаков и параллельного программирования как замена механизму MPI[8]. В языке была изначально реализована модель построения больших параллельных приложений, основанная на глобальном распределенном адресном пространстве. Такая модель подразумевает возможность производить операции (в том числе и их передачу между машинами) со ссылкой на объект, расположенный на другой машине, также участвующей в вычислениях. Этот механизм позволяет отслеживать, какие вычисления на каких системах выполняются, а также подключать к производимым вычислениям новые машины[8]. Ключевые особенности языка
ПримерыПример функции: 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) и др. Примечания
Литература
Ссылки
|
Portal di Ensiklopedia Dunia