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

Поделись знанием:
Перейти к: навигация, поиск
Julia
Класс языка:

мультипарадигмальный: процедурный, на основе мультиметодов, функциональный, мета

Тип исполнения:

компилируемый (JIT)

Появился в:

2012

Автор:

Стефан Карпински,
Джефф Безансон,
Вирал Шах

Расширение файлов:

.jl

Выпуск:

0.4.0 (8 октября 2015 г.[1])

Тестовая версия:

0.5.0-dev (обновляется ежедневно)

Система типов:

динамический с опциональными аннотациями типов[en] и выводом типов

Испытал влияние:

Си, NumPy, Matlab, R, Scheme, Lisp, Python, Perl, Ruby

Лицензия:

Лицензия MIT

Сайт:

[julialang.org/ ng.org]

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





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

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

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

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

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

Идеология

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

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

Возможности 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[8].

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

Инструменты

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

Напишите отзыв о статье "Julia (язык программирования)"

Примечания

  1. [github.com/JuliaLang/julia/releases/tag/v0.4.0 Release Release 0.4.0 · JuliaLang/julia · GitHub]
  2. [julialang.org/ The Julia Language]. [www.webcitation.org/6Gqdtdypc Архивировано из первоисточника 24 мая 2013].
  3. Bryant, Avi [strata.oreilly.com/2012/10/matlab-r-julia-languages-for-data-analysis.html Matlab, R, and Julia: Languages for data analysis]. O'Reilly Strata (Oct 2012). Проверено 7 февраля 2013. [www.webcitation.org/6GqduIJec Архивировано из первоисточника 24 мая 2013].
  4. 1 2 3 4 5 Пол Крил. [www.osp.ru/news/articles/2012/17/13015215/ Учёным предлагается альтернатива Си — язык Julia]. «Открытые системы» (27 апреля 2012). Проверено 27 апреля 2012. [www.webcitation.org/6AeoASpXG Архивировано из первоисточника 14 сентября 2012]. (оригинал Krill, Paul [www.infoworld.com/d/application-development/new-julia-language-seeks-be-the-c-scientists-190818 New Julia language seeks to be the C for scientists]. InfoWorld. Проверено 7 февраля 2013. [www.webcitation.org/6GqdvSRS5 Архивировано из первоисточника 24 мая 2013].)
  5. [julialang.org/images/julia-dynamic-2012-tr.pdf Julia: A Fast Dynamic Language for Technical Computing] (PDF) (2012). [www.webcitation.org/6GqdwS1oG Архивировано из первоисточника 24 мая 2013].
  6. [julialang.org/blog/2012/02/why-we-created-julia/ Why We Created Julia] (Feb 2012). Проверено 7 февраля 2013. [www.webcitation.org/6Gqdx1FXF Архивировано из первоисточника 24 мая 2013].
  7. Mark, Gibbs [www.networkworld.com/columnists/2013/010913-gearhead.html Gear head]. Network World (2013‐1‐9). Проверено 7 февраля 2013. [www.webcitation.org/6Gqdxc16w Архивировано из первоисточника 24 мая 2013].
  8. 1 2 Stephan Boyer. [beowulf.lcs.mit.edu/18.337/projects/Boyer_report.pdf A Graphical Front End for the Julia Programming Language] (англ.). Массачусетский технологический институт (December 2011). Проверено 23 июля 2012. [www.webcitation.org/6AeoCsd50 Архивировано из первоисточника 14 сентября 2012].
  9. [forio.com/julia/ The Julia Studio]. [www.webcitation.org/6GqdybxOg Архивировано из первоисточника 24 мая 2013].
  10. [junolab.org/ 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. — С. 171-207. — 320 с. — ISBN 978-1941222157.
  • Ivo Balbaert. Getting started with Julia Programming Language. — Packt Publishing, Feb. 2015. — 159 p. — ISBN 978-1783284795.
  • Анатолий Левенчук. [blogs.trust.ua/levenchuk/2015/02/08/1743/Ob-Julia-language/ Об Julia language]. trust.ua (08/02/2015). Проверено 5 июля 2015..

Ссылки

  • [julialang.org/ ng.org] — официальный сайт Julia
  • [github.com/JuliaLang Страница проекта на GitHub]


Отрывок, характеризующий Julia (язык программирования)



По переулкам Хамовников пленные шли одни с своим конвоем и повозками и фурами, принадлежавшими конвойным и ехавшими сзади; но, выйдя к провиантским магазинам, они попали в середину огромного, тесно двигавшегося артиллерийского обоза, перемешанного с частными повозками.
У самого моста все остановились, дожидаясь того, чтобы продвинулись ехавшие впереди. С моста пленным открылись сзади и впереди бесконечные ряды других двигавшихся обозов. Направо, там, где загибалась Калужская дорога мимо Нескучного, пропадая вдали, тянулись бесконечные ряды войск и обозов. Это были вышедшие прежде всех войска корпуса Богарне; назади, по набережной и через Каменный мост, тянулись войска и обозы Нея.
Войска Даву, к которым принадлежали пленные, шли через Крымский брод и уже отчасти вступали в Калужскую улицу. Но обозы так растянулись, что последние обозы Богарне еще не вышли из Москвы в Калужскую улицу, а голова войск Нея уже выходила из Большой Ордынки.
Пройдя Крымский брод, пленные двигались по нескольку шагов и останавливались, и опять двигались, и со всех сторон экипажи и люди все больше и больше стеснялись. Пройдя более часа те несколько сот шагов, которые отделяют мост от Калужской улицы, и дойдя до площади, где сходятся Замоскворецкие улицы с Калужскою, пленные, сжатые в кучу, остановились и несколько часов простояли на этом перекрестке. Со всех сторон слышался неумолкаемый, как шум моря, грохот колес, и топот ног, и неумолкаемые сердитые крики и ругательства. Пьер стоял прижатый к стене обгорелого дома, слушая этот звук, сливавшийся в его воображении с звуками барабана.
Несколько пленных офицеров, чтобы лучше видеть, влезли на стену обгорелого дома, подле которого стоял Пьер.
– Народу то! Эка народу!.. И на пушках то навалили! Смотри: меха… – говорили они. – Вишь, стервецы, награбили… Вон у того то сзади, на телеге… Ведь это – с иконы, ей богу!.. Это немцы, должно быть. И наш мужик, ей богу!.. Ах, подлецы!.. Вишь, навьючился то, насилу идет! Вот те на, дрожки – и те захватили!.. Вишь, уселся на сундуках то. Батюшки!.. Подрались!..
– Так его по морде то, по морде! Этак до вечера не дождешься. Гляди, глядите… а это, верно, самого Наполеона. Видишь, лошади то какие! в вензелях с короной. Это дом складной. Уронил мешок, не видит. Опять подрались… Женщина с ребеночком, и недурна. Да, как же, так тебя и пропустят… Смотри, и конца нет. Девки русские, ей богу, девки! В колясках ведь как покойно уселись!
Опять волна общего любопытства, как и около церкви в Хамовниках, надвинула всех пленных к дороге, и Пьер благодаря своему росту через головы других увидал то, что так привлекло любопытство пленных. В трех колясках, замешавшихся между зарядными ящиками, ехали, тесно сидя друг на друге, разряженные, в ярких цветах, нарумяненные, что то кричащие пискливыми голосами женщины.
С той минуты как Пьер сознал появление таинственной силы, ничто не казалось ему странно или страшно: ни труп, вымазанный для забавы сажей, ни эти женщины, спешившие куда то, ни пожарища Москвы. Все, что видел теперь Пьер, не производило на него почти никакого впечатления – как будто душа его, готовясь к трудной борьбе, отказывалась принимать впечатления, которые могли ослабить ее.
Поезд женщин проехал. За ним тянулись опять телеги, солдаты, фуры, солдаты, палубы, кареты, солдаты, ящики, солдаты, изредка женщины.
Пьер не видал людей отдельно, а видел движение их.
Все эти люди, лошади как будто гнались какой то невидимою силою. Все они, в продолжение часа, во время которого их наблюдал Пьер, выплывали из разных улиц с одним и тем же желанием скорее пройти; все они одинаково, сталкиваясь с другими, начинали сердиться, драться; оскаливались белые зубы, хмурились брови, перебрасывались все одни и те же ругательства, и на всех лицах было одно и то же молодечески решительное и жестоко холодное выражение, которое поутру поразило Пьера при звуке барабана на лице капрала.
Уже перед вечером конвойный начальник собрал свою команду и с криком и спорами втеснился в обозы, и пленные, окруженные со всех сторон, вышли на Калужскую дорогу.
Шли очень скоро, не отдыхая, и остановились только, когда уже солнце стало садиться. Обозы надвинулись одни на других, и люди стали готовиться к ночлегу. Все казались сердиты и недовольны. Долго с разных сторон слышались ругательства, злобные крики и драки. Карета, ехавшая сзади конвойных, надвинулась на повозку конвойных и пробила ее дышлом. Несколько солдат с разных сторон сбежались к повозке; одни били по головам лошадей, запряженных в карете, сворачивая их, другие дрались между собой, и Пьер видел, что одного немца тяжело ранили тесаком в голову.
Казалось, все эти люди испытывали теперь, когда остановились посреди поля в холодных сумерках осеннего вечера, одно и то же чувство неприятного пробуждения от охватившей всех при выходе поспешности и стремительного куда то движения. Остановившись, все как будто поняли, что неизвестно еще, куда идут, и что на этом движении много будет тяжелого и трудного.
С пленными на этом привале конвойные обращались еще хуже, чем при выступлении. На этом привале в первый раз мясная пища пленных была выдана кониною.
От офицеров до последнего солдата было заметно в каждом как будто личное озлобление против каждого из пленных, так неожиданно заменившее прежде дружелюбные отношения.
Озлобление это еще более усилилось, когда при пересчитывании пленных оказалось, что во время суеты, выходя из Москвы, один русский солдат, притворявшийся больным от живота, – бежал. Пьер видел, как француз избил русского солдата за то, что тот отошел далеко от дороги, и слышал, как капитан, его приятель, выговаривал унтер офицеру за побег русского солдата и угрожал ему судом. На отговорку унтер офицера о том, что солдат был болен и не мог идти, офицер сказал, что велено пристреливать тех, кто будет отставать. Пьер чувствовал, что та роковая сила, которая смяла его во время казни и которая была незаметна во время плена, теперь опять овладела его существованием. Ему было страшно; но он чувствовал, как по мере усилий, которые делала роковая сила, чтобы раздавить его, в душе его вырастала и крепла независимая от нее сила жизни.
Пьер поужинал похлебкою из ржаной муки с лошадиным мясом и поговорил с товарищами.
Ни Пьер и никто из товарищей его не говорили ни о том, что они видели в Москве, ни о грубости обращения французов, ни о том распоряжении пристреливать, которое было объявлено им: все были, как бы в отпор ухудшающемуся положению, особенно оживлены и веселы. Говорили о личных воспоминаниях, о смешных сценах, виденных во время похода, и заминали разговоры о настоящем положении.
Солнце давно село. Яркие звезды зажглись кое где по небу; красное, подобное пожару, зарево встающего полного месяца разлилось по краю неба, и огромный красный шар удивительно колебался в сероватой мгле. Становилось светло. Вечер уже кончился, но ночь еще не начиналась. Пьер встал от своих новых товарищей и пошел между костров на другую сторону дороги, где, ему сказали, стояли пленные солдаты. Ему хотелось поговорить с ними. На дороге французский часовой остановил его и велел воротиться.
Пьер вернулся, но не к костру, к товарищам, а к отпряженной повозке, у которой никого не было. Он, поджав ноги и опустив голову, сел на холодную землю у колеса повозки и долго неподвижно сидел, думая. Прошло более часа. Никто не тревожил Пьера. Вдруг он захохотал своим толстым, добродушным смехом так громко, что с разных сторон с удивлением оглянулись люди на этот странный, очевидно, одинокий смех.
– Ха, ха, ха! – смеялся Пьер. И он проговорил вслух сам с собою: – Не пустил меня солдат. Поймали меня, заперли меня. В плену держат меня. Кого меня? Меня! Меня – мою бессмертную душу! Ха, ха, ха!.. Ха, ха, ха!.. – смеялся он с выступившими на глаза слезами.
Какой то человек встал и подошел посмотреть, о чем один смеется этот странный большой человек. Пьер перестал смеяться, встал, отошел подальше от любопытного и оглянулся вокруг себя.
Прежде громко шумевший треском костров и говором людей, огромный, нескончаемый бивак затихал; красные огни костров потухали и бледнели. Высоко в светлом небе стоял полный месяц. Леса и поля, невидные прежде вне расположения лагеря, открывались теперь вдали. И еще дальше этих лесов и полей виднелась светлая, колеблющаяся, зовущая в себя бесконечная даль. Пьер взглянул в небо, в глубь уходящих, играющих звезд. «И все это мое, и все это во мне, и все это я! – думал Пьер. – И все это они поймали и посадили в балаган, загороженный досками!» Он улыбнулся и пошел укладываться спать к своим товарищам.


В первых числах октября к Кутузову приезжал еще парламентер с письмом от Наполеона и предложением мира, обманчиво означенным из Москвы, тогда как Наполеон уже был недалеко впереди Кутузова, на старой Калужской дороге. Кутузов отвечал на это письмо так же, как на первое, присланное с Лористоном: он сказал, что о мире речи быть не может.
Вскоре после этого из партизанского отряда Дорохова, ходившего налево от Тарутина, получено донесение о том, что в Фоминском показались войска, что войска эти состоят из дивизии Брусье и что дивизия эта, отделенная от других войск, легко может быть истреблена. Солдаты и офицеры опять требовали деятельности. Штабные генералы, возбужденные воспоминанием о легкости победы под Тарутиным, настаивали у Кутузова об исполнении предложения Дорохова. Кутузов не считал нужным никакого наступления. Вышло среднее, то, что должно было совершиться; послан был в Фоминское небольшой отряд, который должен был атаковать Брусье.