WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте
Julia
Класс языка мультипарадигмальный: процедурный, на основе мультиметодов, функциональный, мета
Тип исполнения компилируемый (JIT)
Появился в 23 августа 2009[1][2]
Автор Стефан Карпински,
Джефф Безансон,
Вирал Шах
Разработчик см. Julia. GitHub.
Расширение файлов .jl[3]
Выпуск
Система типов динамический с опциональными аннотациями типов[en] и выводом типов
Испытал влияние Си, NumPy, Matlab, R, Scheme, Lisp, Python, Perl, Ruby
Лицензия лицензия MIT[5]
ОС Linux, Microsoft Windows[6] и macOS[6]
Сайт julialang.org

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

Описание языка

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

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

История создания

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

Идеология

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

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

Возможности Julia

Ссылаясь на официальный сайт, основные возможности языка:

Примеры кода

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

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

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

plot(sin, -pi, pi)

или

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

[13].

Инструменты

Julia Studio — это интегрированная среда разработки для Julia.[14] В настоящее время её заменила среда Juno[15], являющаяся надстройкой над Atom.

Примечания

  1. LICENSE.md file in the JuliaLang/julia repositoryGitHub Inc..
  2. Безансон Д. JuliaLang/julia - commit eb256df: "beginning work on parser"GitHub Inc..
  3. http://fileformats.archiveteam.org/wiki/Julia
  4. Release 1.1.0 — 2019.
  5. https://github.com/JuliaLang/julia/blob/master/LICENSE.md
  6. 1 2 https://julialang.org/downloads/
  7. The Julia Language. Архивировано 24 мая 2013 года.
  8. Bryant, Avi Matlab, R, and Julia: Languages for data analysis. O'Reilly Strata (Oct 2012). Проверено 7 февраля 2013. Архивировано 24 мая 2013 года.
  9. 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 года.)
  10. Julia: A Fast Dynamic Language for Technical Computing (PDF) (2012). Архивировано 24 мая 2013 года.
  11. Why We Created Julia (Feb 2012). Проверено 7 февраля 2013. Архивировано 24 мая 2013 года.
  12. Mark, Gibbs Gear head. Network World (2013‐1‐9). Проверено 7 февраля 2013. Архивировано 24 мая 2013 года.
  13. 1 2 Stephan Boyer. A Graphical Front End for the Julia Programming Language (англ.). Массачусетский технологический институт (December 2011). Проверено 23 июля 2012. Архивировано 13 сентября 2012 года.
  14. The Julia Studio. Архивировано 24 мая 2013 года.
  15. Juno, the Interactive 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. — С. 171—207. — 320 с. ISBN 978-1941222157.
  • Ivo Balbaert. Getting started with Julia Programming Language. — Packt Publishing, Feb. 2015. — 159 p. ISBN 978-1783284795.
  • Анатолий Левенчук. Об Julia language (недоступная ссылка). trust.ua (08/02/2015). Проверено 5 июля 2015. Архивировано 4 марта 2016 года..

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии