Julia - это высокоуровневый , высокопроизводительный динамический язык программирования . Хотя это язык общего назначения и может использоваться для написания любых приложений, многие из его функций хорошо подходят для численного анализа и вычислительной науки . [16] [17] [18] [19]
Парадигма | Мультипарадигма : множественная диспетчеризация (первичная парадигма), процедурная , функциональная , мета , многоэтапная [1] |
---|---|
Разработано | Джефф Безансон , Алан Эдельман , Стефан Карпински , Вирал Б. Шах |
Разработчик | Джефф Безансон , Стефан Карпински , Вирал Б. Шах и другие участники [2] [3] |
Впервые появился | 2012 [4] |
Стабильный выпуск | 1.6.1 [5] / 23 апреля 2021 г . и 1.7.0-DEV с ежедневными обновлениями |
Печатная дисциплина | Динамический , [6] сильный , [7] именительный , параметрический , факультативный |
Язык реализации | Джулия, C , C ++ , Схема , LLVM [8] |
Платформа | Уровень 1: x86-64 , IA-32 , 64-разрядные графические процессоры ARM , CUDA / Nvidia. Уровень 2: 32-разрядная версия Windows (64-разрядная версия - это уровень 1). Уровень 3: 32-разрядные процессоры ARM , PowerPC , AMD. Также имеет поддержку веб-браузера (для JavaScript и WebAssembly ) [9] и работает в Android . Подробнее см. «Поддерживаемые платформы» . |
Операционные системы | Linux , macOS , Windows и FreeBSD |
Лицензия | MIT (основной), [2] GPL v2 ; [8] [10] а Makefile опциона не включает GPL библиотеки [11] |
Расширения имени файла | .jl |
Веб-сайт | JuliaLang.org |
Под влиянием | |
|
Отличительные аспекты дизайна Джулии включают систему типов с параметрическим полиморфизмом на языке динамического программирования ; с множественной отправкой в качестве основной парадигмы программирования . Юлия поддерживает одновременную , (наборный) параллельно и распределенные вычислительные (с использованием или без использования MPI [20] или встроенный в соответствующих [ разъяснение необходимости ] [21] , чтобы « OpenMP -Style» нитей [22] ), а также прямой вызова из C и библиотеки Fortran без связующего кода . Джулия использует своевременный (JIT) компилятор, который в сообществе Julia называют « опережающим » (JAOT), поскольку Джулия компилирует весь код (по умолчанию) в машинный код перед его запуском. [23] [24]
Julia собирает мусор , [25] использует энергичные вычисления и включает эффективные библиотеки для вычислений с плавающей запятой , линейной алгебры , генерации случайных чисел и сопоставления регулярных выражений . Доступно множество библиотек, в том числе некоторые (например, для быстрого преобразования Фурье ), которые ранее были связаны с Julia, а теперь являются отдельными. [26]
Некоторые инструменты разработки поддерживают кодирование в Julia, например, интегрированные среды разработки (например, Microsoft Visual Studio Code с доступными расширениями, добавляющими поддержку Julia в IDE, например, обеспечивая поддержку отладки и линтинга [27] ); со встроенными инструментами, например профилировщиком (и поддержка графа пламени доступна [28] [29] для встроенного), отладчик, [30] и пакет Rebugger.jl «поддерживает отладку с повторным выполнением » [a] и др. . [32]
История
Работа над Джулией была начата в 2009 году Джеффом Безансоном, Стефаном Карпински , Виралом Б. Шахом и Аланом Эдельманом , которые намеревались создать свободный язык, который был бы одновременно высокоуровневым и быстрым. 14 февраля 2012 года команда запустила веб-сайт с сообщением в блоге, объясняющим миссию языка. [33] В интервью InfoWorld в апреле 2012 года Карпински сказал об имени «Джулия»: «На самом деле нет веской причины. Это просто казалось красивым именем». [34] Безансон сказал, что выбрал это имя по рекомендации друга, [35] позже написал, что Джулия означает «необычный шепелявый Джефф автоматизирован». [36]
С момента запуска в 2012 году сообщество Джулии выросло, и «Юлию загрузили пользователи более чем 10 000 компаний» [37] с более чем 25 000 000 загрузок по состоянию на февраль 2021 года.[Обновить], рост на 87% за год (другие статистические данные, связанные с Julia, выросли на целых 113%), [38] и используется в более чем 1500 университетах, [39] [40] [41] Академическая конференция JuliaCon для пользователей Julia и разработчиков проводится ежегодно с 2014 года, а в последние годы 2020 JuliaCon приветствует более 28 900 уникальных зрителей. [42]
Версия 0.3 была выпущена в августе 2014 года, версия 0.4 в октябре 2015 года, версия 0.5 в октябре 2016 года [43] и версия 0.6 в июне 2017 года. [44] Как Julia 0.7 (полезный выпуск для тестирования пакетов, так и для того, чтобы знать, как обновлять) их для 1.0 [45] ) и версии 1.0 были выпущены 8 августа 2018 года. Работа над Julia 0.7 была «огромным мероприятием» (например, из-за «совершенно нового оптимизатора»), и некоторые изменения были внесены в семантику, например, итерация интерфейс был упрощен; [46], и синтаксис немного изменился (теперь синтаксис стабилен, то же самое для 1.x и 0.7).
Релиз-кандидат для Julia 1.0 (Julia 1.0.0-rc1) был выпущен 7 августа 2018 года, а финальная версия - днем позже (и к настоящему времени Julia 1.0.x являются самыми старыми версиями, которые все еще поддерживаются и имеют долгосрочную поддержку ( LTS); не менее года). Julia 1.1 была выпущена в январе 2019 года, например, с новой функцией языка «стек исключений». Выпуски исправлений ожидаются примерно ежемесячно, для версий 1.4.x и 1.0.x и Julia 1.0.1 до 1.0.5 следовали этому графику. Julia 1.2 была выпущена в августе 2019 года и имеет, например, некоторую встроенную поддержку веб-браузеров (для тестирования при работе в виртуальной машине JavaScript ), [47] и Julia 1.5 в августе 2020 года (а вместе с ней и Julia 1.4.x, 1.3. x, 1.2.x и Julia 1.1.x больше не поддерживаются). Julia 1.3 добавила, например, составной многопоточный параллелизм и систему двоичных артефактов для пакетов Julia. [48]
Julia 1.4 позволила улучшить синтаксис индексирования массивов для обработки, например, массивов, начинающихся с 0 , со A[begin+1]
вторым элементом массива A. [49] Модель памяти также была изменена. [50] В второстепенном выпуске 1.4.2 исправлено, например, проблема с Zlib , удвоение скорости декомпрессии. [51]
В Julia 1.5 добавлена поддержка отладки записи и воспроизведения [52] для инструмента Mozilla rr . Это большой выпуск с измененным поведением в REPL (soft scope), таким же, как в Jupyter , но полностью совместимым с кодом, отличным от REPL. Большая часть API потока была помечена как стабильная, и в этом выпуске «произвольные неизменяемые объекты - независимо от того, имеют ли они поля, которые ссылаются на изменяемые объекты или нет - теперь могут быть выделены стеком», [53] сокращая выделение кучи, например views
, больше не распределение. Все версии работали над производительностью, но особенно работа над Julia 1.5 нацелена на так называемую производительность «time-to-first-plot», в целом скорость самой компиляции (в отличие от производительности сгенерированного кода) и добавляет инструменты для разработчиков, чтобы улучшить загрузку пакетов. [54] Julia 1.6 также еще больше улучшает такую производительность.
Пакеты, которые работают в Julia 1.0.x, должны работать в 1.1.x или новее, что обеспечивается гарантией синтаксиса прямой совместимости . Заметным исключением были библиотеки интерфейса иностранного языка, такие как JavaCall.jl (для языков JVM, таких как Java или Scala ) и Rcall.jl ( язык R ) из-за некоторых изменений, связанных с потоками (в то время, когда все функции потоковой передачи в Julia были помечены как экспериментальные). [55] Проблема была особенно сложной для Java JVM, поскольку у нее есть некоторые особые ожидания относительно того, как используется адресное пространство стека . Обходной путь JULIA_ALWAYS_COPY_STACKS
был опубликован для Julia 1.3.0, в то время как полное исправление для Java находится на рассмотрении и не имеет установленного срока. [56] Кроме того, в версиях JVM, начиная с Java 11, эта проблема не возникает. [57] Срок исполнения Julia 1.6 был перенесен на конец 2020 года [58], а Julia 1.7 находится в разработке.
Julia 1.6 была самой крупной версией со времен 1.0, быстрее во многих отношениях, например, ввела параллельную предварительную компиляцию и более быструю загрузку пакетов, в некоторых случаях «50-кратное ускорение загрузки больших деревьев двоичных артефактов» [59], и, вероятно, станет следующий релиз с долгосрочной поддержкой (LTS) Юлии. Веха для 2.0 в настоящее время не имеет установленного срока. [60]
Выпущена Julia 1.6.1, следующие вехи - Julia 1.7 и 1.8, первая перенесена на 1 июня 2021 года [61], а с Julia 1.7 разработка Julia вернулась к выпускам с ограничением по времени . [62]
Известные применения
Джулия привлекла некоторых известных пользователей, от инвестиционного менеджера BlackRock , который использует его для анализа временных рядов , до британской страховой компании Aviva , которая использует его для расчета рисков . В 2015 году Федеральный резервный банк Нью-Йорка использовал Джулию для построения моделей экономики Соединенных Штатов, отметив, что язык сделал оценку модели «примерно в 10 раз быстрее», чем его предыдущая реализация MATLAB . Соучредители Джулии основали компанию Julia Computing в 2015 году, чтобы предоставлять клиентам платную поддержку, обучение и консультационные услуги, хотя Джулия по-прежнему может пользоваться ею бесплатно. На конференции JuliaCon [63] 2017 года Джеффри Региер, Кено Фишер и другие заявили [64], что в проекте Celeste [65] Джулия использовалась для достижения «пиковой производительности 1,54 петафлопс при использовании 1,3 миллиона потоков» [66] на 9300 Knights Landing ( KNL) суперкомпьютера Cori II (Cray XC40) (на тот момент шестой по скорости компьютер в мире). [67] Джулия, таким образом, присоединяется к C, C ++ и Fortran как к языкам высокого уровня, на которых были выполнены вычисления в петафлопсах.
Трое из соавторов Джулии являются лауреатами Премии Джеймса Х. Уилкинсона в области программного обеспечения для числовых вычислений 2019 года (присуждаемой каждые четыре года) за создание Джулии - инновационной среды для создания высокопроизводительных инструментов, позволяющих проводить анализ и решение задач вычислительной науки ". [68] Кроме того, Алан Эдельман, профессор прикладной математики в Массачусетском технологическом институте, был выбран для присуждения премии Сидни Фернбаха компьютерного общества IEEE 2019 года «за выдающиеся достижения в высокопроизводительных вычислениях, линейной алгебре и вычислительной науке, а также за вклад в программу Джулии. язык программирования." [69]
Julia Computing и NVIDIA объявляют о «доступности языка программирования Julia в качестве предварительно упакованного контейнера в реестре контейнеров NVIDIA GPU Cloud (NGC)» [70], при этом NVIDIA заявляет: «Легко развернуть Julia на x86 и Arm [..] Джулия предлагает пакет для комплексной экосистемы высокопроизводительных вычислений, охватывающей машинное обучение, науку о данных, различные научные области и визуализацию ". [71]
Кроме того, "Джулия была выбрана Альянсом по моделированию климата в качестве единственного языка реализации для их глобальной климатической модели следующего поколения. Этот многомиллионный проект направлен на создание климатической модели земного масштаба, дающей представление о последствиях и проблемах изменения климата". " [70]
Джулия используется НАСА [72] [73] и бразильским INPE для планирования космических миссий и моделирования спутников . [74] Еще одна попытка заключается в работе над встроенным проектом по управлению спутником в космосе с использованием Джулии для управления ориентацией . [ необходима цитата ]
Спонсоры
В 2014 году язык Julia стал проектом, финансируемым NumFOCUS Fisccally, с целью обеспечить долгосрочную устойчивость проекта. [75] Доктор Джереми Кепнер из лаборатории Линкольна Массачусетского технологического института был спонсором-основателем проекта Джулия в его первые дни. Кроме того, средство от Гордона и Бетти Мура Фонда , в Слоуне Alfred , Intel и агентств , такие как NSF , DARPA , NIH , НАСА и FAA было необходимо для развития Юли. [76] Mozilla , производитель веб-браузера Firefox, с грантами на исследования за первое полугодие 2019 года спонсировала «члена официальной команды Джулии» для проекта «Привлечение Джулии к браузеру», [77] имея в виду Firefox и другие веб-сайты. браузеры. [78] [79] [80] [81]
Юлия Компьютинг
Julia Computing, Inc. была основана в 2015 году Виралом Б. Шахом, Дипаком Винчи, Аланом Эдельманом, Джеффом Безансоном, Стефаном Карпински и Кено Фишером . [82]
В июне 2017 года, Юлия Вычислительный привлекла $ 4,6 миллиона в стартовом финансировании от General Catalyst и основатель коллектива , [83] и в том же месяце был «предоставлен $ 910000 по Alfred P. Sloan Foundation для поддержки с открытым исходным кодом развития Джулию, в том числе $ 160 000 , чтобы содействовать разнообразие в сообществе Джулии » [84], а в декабре 2019 года компания получила от правительства США финансирование в размере 1,1 миллиона долларов на« разработку инструмента машинного обучения нейронных компонентов для снижения общего энергопотребления систем отопления, вентиляции и кондиционирования воздуха (HVAC). в зданиях ». [85]
Особенности языка
Юлия является языком программирования общего назначения , [86] , а также первоначально разработаны для численных / технических вычислений. Это также полезно для низкоуровневых систем программирования , [87] в качестве языка спецификации , [88] и для веб - программирования на сервере , так [89] [90] и клиентом [91] [9] стороны.
Согласно официальному сайту, основными особенностями языка являются:
- Множественная отправка : предоставление возможности определять поведение функции для многих комбинаций типов аргументов
- Система динамических типов : типы для документации, оптимизации и отправки
- Производительность приближается к статически типизированным языкам, таким как C
- Встроенный менеджер пакетов
- Lisp- подобные макросы и другие средства метапрограммирования
- Вызов функций C напрямую: без оболочек или специальных API
- Возможность взаимодействия с другими языками, например Python с PyCall, [b] R с RCall и Java / Scala с JavaCall
- Мощные возможности, подобные оболочке, для управления другими процессами
- Разработан для параллельных и распределенных вычислений
- Сопрограммы : легкая зеленая резьба
- Типы, определяемые пользователем, такие же быстрые и компактные, как и встроенные
- Автоматическая генерация эффективного специализированного кода для разных типов аргументов
- Элегантные и расширяемые преобразования и рекламные акции для числовых и других типов
- Эффективная поддержка Unicode , включая, помимо прочего, UTF-8
Множественная диспетчеризация (также называемые мультиметоды в Лиспе) является обобщением из одной рассылки - полиморфный механизм используется совместно объектно-ориентированное программирование (ООП) языков - который использует наследование . В Julia все конкретные типы являются подтипами абстрактных типов, прямо или косвенно подтипами типа Any , который является вершиной иерархии типов. Конкретные типы не могут быть разделены на подтипы, как в других языках; Вместо этого используется композиция (см. также наследование и выделение подтипов ).
Джулия черпает вдохновение в различных диалектах Лиспа, включая Scheme и Common Lisp , и имеет много общих черт с Dylan , также ориентированным на множественную диспетчеризацию динамическим языком (который имеет инфиксный синтаксис свободной формы, подобный ALGOL, а не Lisp- как префиксный синтаксис, в то время как в Julia «все» [95] является выражением ), и с Fortress , другим языком числового программирования (который имеет множественную диспетчеризацию и сложную систему параметрических типов). Хотя объектная система Common Lisp (CLOS) добавляет в Common Lisp множественную диспетчеризацию, не все функции являются универсальными.
В Julia, Dylan и Fortress по умолчанию используется расширяемость, а все встроенные функции системы являются универсальными и расширяемыми. В Dylan множественная диспетчеризация так же фундаментальна, как и в Julia: все определяемые пользователем функции и даже базовые встроенные операции, такие +
как общие. Однако система типов Дилана не полностью поддерживает параметрические типы, которые более типичны для родословной языков ML . По умолчанию CLOS не позволяет отправлять параметрические типы Common Lisp; такая расширенная семантика диспетчеризации может быть добавлена только как расширение через протокол метаобъектов CLOS . За счет конвергентной конструкции Fortress также поддерживает множественную диспетчеризацию параметрических типов; Однако, в отличие от Джулии, Fortress имеет статическую, а не динамическую типизацию, с отдельными этапами компиляции и выполнения. Возможности языка сведены в следующей таблице:
Язык | Система типов | Общие функции | Параметрические типы |
---|---|---|---|
Юлия | Динамический | По умолчанию | да |
Common Lisp | Динамический | Выбрать в | Да (но без отправки) |
Дилан | Динамический | По умолчанию | Частично (без отправки) |
Крепость | Статический | По умолчанию | да |
По умолчанию среда выполнения Julia должна быть предварительно установлена при запуске исходного кода, предоставленного пользователем. Кроме того, с помощью PackageCompiler.jl можно создать автономный исполняемый файл, которому не нужен исходный код Julia . [96]
Синтаксические макросы Джулии (используемые для метапрограммирования ), такие как макросы Lisp, более мощные, чем макросы подстановки текста, используемые в препроцессоре некоторых других языков, таких как C, потому что они работают на уровне абстрактных синтаксических деревьев (AST). Макросистема Джулии гигиенична , но также при желании поддерживает преднамеренный захват (например, для анафорических макросов ) с использованием esc
конструкции.
Взаимодействие
Официальный дистрибутив Julia включает интерактивный цикл чтения-оценки-печати (REPL) из командной строки [97] с возможностью поиска, завершением табуляции , а также специальной справкой и режимами оболочки [98], которые можно использовать для экспериментов и тестирования. кодируйте быстро. [99] Следующий фрагмент представляет собой пример сеанса, в котором строки автоматически объединяются функцией println: [100]
Юлия> р ( х ) = 2 х ^ 2 + 1 ; f ( x , y ) = 1 + 2 p ( x ) y julia> println ( «Привет, мир!» , «Я в облаке» , f ( 0 , 4 ), «поскольку Джулия поддерживает узнаваемый синтаксис!» ) Привет Мир! Я в облаке 9, так как Джулия поддерживает узнаваемый синтаксис!
REPL предоставляет пользователю доступ к системной оболочке и в режим помощи, нажимая ;
или ?
после приглашения (перед каждой командой), соответственно. Он также хранит историю команд, в том числе между сеансами. [101] Код, который можно протестировать в интерактивном разделе Julia или сохранить в файл с .jl
расширением и запустить из командной строки, набрав: [95]
$ julia <имя файла>
Julia поддерживается Jupyter , интерактивной интерактивной средой «записных книжек» [102] и Pluto.jl , « реактивной записной книжкой» (где записные книжки сохраняются как чистые файлы Julia), возможной заменой первого типа. [103]
Используйте с другими языками
На практике Julia совместима со многими языками (например, с большинством из 10–20 наиболее популярных языков). ccall
Ключевое слово Джулии используется для индивидуального вызова функций общей библиотеки C-exported или Fortran, а также пакетов, позволяющих вызывать другие языки, например Python, R, MATLAB, Java или Scala. [104] И пакеты для других языков, например , Python (или R или Ruby), т.е. pyjulia, чтобы позвонить в Джулию.
У Джулии есть поддержка последней версии Unicode 13.0, [105] с UTF-8, используемым для строк (по умолчанию) и для исходного кода Julia (разрешающий только допустимый UTF-8 в последней версии), что означает также возможность использования в качестве опции общих математических символов для многих операторов, например ∈ для in
оператора.
У Джулии есть пакеты, поддерживающие языки разметки, такие как HTML (а также HTTP ), XML , JSON и BSON , а также для баз данных и использования в Интернете в целом.
Система пакетов
У Джулии есть встроенный менеджер пакетов и система реестра по умолчанию. [106] Пакеты чаще всего распространяются в виде исходного кода, размещенного на GitHub , хотя также могут использоваться альтернативные варианты. Пакеты также могут быть установлены как двоичные файлы с использованием артефактов. [107] Диспетчер пакетов Джулии используется для запроса и компиляции пакетов, а также для управления средами. Поддерживаются объединенные реестры пакетов, что позволяет добавлять локально реестры, отличные от официальных. [108]
Использует
Джулия использовалась для выполнения петауровневых вычислений с библиотекой Celeste для обзоров неба . [109] [110] Джулия используется аналитическими платформами BlackRock Engineering [111] .
Выполнение
Ядро Джулии реализовано на языках Julia и C вместе с C ++ для зависимости LLVM . Синтаксический анализ и понижение кода реализованы в FemtoLisp, диалекте Scheme . [112] Проект инфраструктуры компилятора LLVM используется в качестве серверной части для генерации 64-битного или 32-битного оптимизированного машинного кода в зависимости от платформы, на которой работает Джулия. За некоторыми исключениями (например, PCRE ) стандартная библиотека реализована в Julia. Наиболее примечательным аспектом реализации Джулии является ее скорость, которая часто в два раза по сравнению с полностью оптимизированным кодом C (и, следовательно, часто на порядок быстрее, чем Python или R ). [113] [114] [115] Разработка Julia началась в 2009 году, а версия с открытым исходным кодом была опубликована в феврале 2012 года. [4] [116]
Текущие и будущие платформы
Хотя у Джулии есть поддержка macOS уровня 1, то есть для компьютеров Mac на базе Intel, поддержка совершенно новых компьютеров Mac на базе Apple M1 явно не указана (как и для Windows на ARM ). [117] Однако Джулия работает; [118] "хорошо" (при пониженной производительности) с Rosetta 2 (которая должна имитировать Julia). Работа над встроенной полноскоростной поддержкой M1 (т.е. без эмуляции) в основном завершена, и многие программы могут работать, если используется такая сборка Julia, поскольку все тесты Julia, кроме одного, проходят успешно (кроме «Слишком много открытых файлов»).
Поскольку Джулия использует JIT, Джулия генерирует собственный машинный код непосредственно перед первым запуском функции (то есть это другой подход, чем компиляция в байт-код , который вы распространяете по умолчанию для запуска на виртуальной машине (ВМ), например, в случае Java / JVM ; затем переводится из байт-кода во время работы, как это делал Dalvik в более старых версиях Android).
У Джулии четыре уровня поддержки. [119] Поддерживаются все процессоры IA-32 , полностью реализующие субархитектуру i686, и поддерживаются 64-битные x86-64 (также известные как amd64 ), которым меньше десяти лет. Процессоры ARMv8 ( AArch64 ) полностью поддерживаются на первом уровне, а ARMv7 и ARMv6 (AArch32) поддерживаются с некоторыми оговорками (нижний уровень) для Julia 1.0.x, а также имеют официальные исполняемые файлы для более поздних версий, тогда как 32-разрядная поддержка ARM была позже. понижен до уровня 3 (однако неофициальные двоичные файлы доступны для Julia 1.5.1 [120] ). [121] CUDA (то есть графические процессоры Nvidia; реализация PTX ) имеет поддержку уровня 1 с помощью внешнего пакета. Есть также дополнительно пакеты , поддерживающие другие ускорители, такие как Google, TPU , , [122] и графических процессоров AMD также имеют поддержку с , например , OpenCL ; и экспериментальная поддержка стека AMD ROCm . [123] На странице загрузок Джулии представлены исполняемые файлы (и исходный код) для всех официально поддерживаемых платформ.
На некоторых платформах может потребоваться компиляция Джулии из исходного кода (например, оригинального Raspberry Pi ) с определенными параметрами сборки, что уже сделано и доступны неофициальные предварительно созданные двоичные файлы (и инструкции по сборке). [124] [125] Julia была построена на нескольких платформах ARM. PowerPC (64-разрядная версия) имеет поддержку уровня 3, что означает, что он «может или не может быть построен». Julia теперь поддерживается в Raspbian [126], тогда как поддержка лучше для более новых Pis, например, с ARMv7 или новее; Поддержка Джулии осуществляется Фондом Raspberry Pi . [127]
Также имеется поддержка веб-браузеров / JavaScript через JSExpr.jl; [91] и альтернативный язык веб-браузеров, WebAssembly , имеет минимальную поддержку [9] для нескольких предстоящих внешних проектов Julia. Юля умеет компилировать в ARM; таким образом, теоретически приложения для Android можно создавать с помощью NDK , но на данный момент Джулия работает под Android только косвенно, то есть с помощью chroot Ubuntu на Android. [128]
Смотрите также
- Сравнение программ численного анализа
- Сравнение статистических пакетов
- Дифференцируемое программирование
Заметки
- ^ [С Rebugger.jl] вы можете:
- проверяйте различные модификации кода или аргументов столько раз, сколько захотите; вас никогда не заставляют выходить из «режима отладки» и сохранять файл
- запускать один и тот же выбранный блок кода несколько раз (возможно, пробовать различные способы исправления ошибки) без необходимости повторять какую-либо работу по «настройке», которая могла быть необходима для доступа к какому-либо глубоко вложенному методу в исходном стеке вызовов. [31]
- ^ Для вызова более нового Python 3 (старое значение по умолчанию для вызова Python 2 также все еще поддерживается) [92] [93] и вызов в другом направлении, от Python к Julia, также поддерживается с помощью pyjulia . [94]
Рекомендации
- ^ «Сглаживание данных с помощью @generated функций Джулии» . 5 ноября 2015 . Дата обращения 9 декабря 2015 .
Сгенерированные функции Джулии тесно связаны с парадигмой многоступенчатого программирования (MSP), популяризированной Тахой и Шеардом, которая обобщает этапы времени компиляции / времени выполнения программы, позволяя использовать несколько этапов отложенного выполнения кода.
- ^ а б "LICENSE.md" . GitHub .
- ^ «Авторы JuliaLang / julia» . GitHub .
- ^ Б с д е е г ч «Почему мы создали Юлию» . Сайт Юлии . Февраль 2012 . Проверено 7 февраля 2013 года .
- ^ https://github.com/JuliaLang/julia/releases/tag/v1.6.1 .
- ^ Энгхейм, Эрик (17 ноября 2017 г.). «Языки с динамическим типом - это не то, о чем вы думаете» . Средний . Проверено 27 января 2021 года .
- ^ "Джулия строго проверена (набрана)?" . JuliaLang . 7 августа 2018 . Проверено 27 января 2021 года .
- ^ а б «Юля» . Юля . Проект NumFocus . Проверено 9 декабря +2016 .
Библиотека Julia Base, в основном написанная на самой Julia, также объединяет зрелые, лучшие в своем классе библиотеки C и Fortran с открытым исходным кодом для ...
- ^ а б в Фишер, Кено (22 июля 2019 г.). «Бегущая Джулия на wasm» . Проверено 25 июля 2019 .
- ^ "Не-GPL Джулия?" . Groups.google.com . Проверено 31 мая 2017 года .
- ^ «Введите флаг USE_GPL_LIBS Makefile для сборки Julia без библиотек GPL» .
Обратите внимание, что эта фиксация не удаляет утилиты GPL, такие как git и busybox, которые включены в двоичные установщики Julia на Mac и Windows. Это позволяет создавать из исходного кода без каких-либо зависимостей библиотек GPL.
- ^ Стокель-Уокер, Крис. «Юлия: язык Златовласки» . Приращение . Полоса . Дата обращения 23 августа 2020 .
- ^ а б в г «Главная · Язык Джулии» . docs.julialang.org . Проверено 15 августа 2018 .
- ^ «Сеть языков программирования» . GitHub . Проверено 6 декабря +2016 .
- ^ «ЮлиаКон 2016» . JuliaCon . Проверено 6 декабря +2016 .
Он был соавтором языка программирования Scheme, который сильно повлиял на дизайн Джулии.
- ^ Брайант, Ави (15 октября 2012 г.). «Matlab, R и Julia: языки для анализа данных» . О'Рейли Страта. Архивировано из оригинального 26 апреля 2014 года.
- ^ Сингх, Вики (23 августа 2015 г.). «Язык программирования Julia - настоящая альтернатива Python» . Технотификация.
- ^ Криль, Пол (18 апреля 2012 г.). «Язык Новой Джулии стремится быть C для ученых» . InfoWorld .
- ^ Финли, Клинт (3 февраля 2014 г.). «В открытую: человек создает один язык программирования, чтобы управлять ими всеми» . Проводной .
- ^ «GitHub - JuliaParallel / MPI.jl: MPI-оболочки для Джулии» . Параллельная Юлия . Проверено 22 сентября 2019 .
- ^ «Вопросы по началу работы с параллельными вычислениями» . JuliaLang . 16 июня 2019 . Проверено 8 октября 2019 .
- ^ «Юлия и параллелизм» . JuliaLang . 24 июня 2019 . Проверено 22 сентября 2019 .
- ^ Фишер, Кено; Нэш, Джеймсон. «Развитие компилятора - переход к машинному обучению из универсального компилятора» . Блог Julia Computing . Проверено 11 апреля 2019 года .
- ^ «Создание системного образа» . Документация по PackageCompiler .
- ^ «Приостановка сборки мусора для повышения производительности ... хорошая идея или плохая идея?» . Groups.google.com . Проверено 31 мая 2017 года .
- ^ теперь доступнав текущих версиях (эта зависимость является одной из многих, которые были перенесены из стандартной библиотеки в пакет, потому что она лицензирована GPL и, следовательно, не включена в Julia 1.0 по умолчанию.)
using FFTW
«Удалите привязки FFTW из Базы, ararslan · Запрос на вытягивание № 21956 · JuliaLang / julia» . GitHub . Проверено 1 марта 2018 . - ^ "ANN: плагин linter-julia для Atom / Juno" . JuliaLang . 15 февраля 2017 . Проверено 10 апреля 2019 .
- ^ Святой, Тим (13 сентября 2019 г.). «GitHub - timholy / ProfileView.jl: Визуализация данных профилирования Julia» . Проверено 22 сентября 2019 .
- ^ Грегг, Брендан (20 сентября 2019 г.). «GitHub - brendangregg / FlameGraph: визуализатор трассировки стека» . Проверено 22 сентября 2019 .
- ^ «Интерпретатор и отладчик Джулии» . julialang.org . Проверено 10 апреля 2019 .
- ^ «[ANN] Rebugger: интерактивная отладка для Julia 0.7 / 1.0» . JuliaLang . 21 августа 2018 . Проверено 10 апреля 2019 .
- ^ «Главная · Rebugger.jl» . timholy.github.io . Проверено 10 апреля 2019 .
- ^ Джефф Безансон, Стефан Карпински, Вирал Шах, Алан Эдельман. «Почему мы создали Юлию» . JuliaLang.org . Дата обращения 5 июня 2017 .CS1 maint: использует параметр авторов ( ссылка )
- ^ Карпинский, Стефан (18 апреля 2012 г.). «Язык Новой Джулии стремится быть C для ученых» . InfoWorld .
- ^ Торре, Чарльз. «Стефан Карпински и Джефф Безансон о Джулии» . Канал 9 . MSDN . Проверено 4 декабря 2018 .
- ^ Безансон, Джефф. «Тесты CAS» . discourse.julialang.org . Юля . Проверено 2 апреля 2021 года .
- ^ «Информационный бюллетень августа 2020» . juliacomputing.com . 14 августа 2020 . Проверено 7 сентября 2020 .
- ^ «Информационный бюллетень за январь 2021 года - Julia Computing» . juliacomputing.com . Проверено 13 января 2021 года .
- ^ «Юлия Компьютинг» . juliacomputing.com . Проверено 12 августа 2020 .
- ^ «Информационный бюллетень ноябрь 2019» . juliacomputing.com . 7 ноября 2019 . Проверено 29 ноября 2019 года .
- ^ «Информационный бюллетень Julia Computing, показатели роста» . juliacomputing.com . Проверено 11 февраля 2019 .
- ^ «Итоги JuliaCon 2020» . julialang.org . 11 августа 2020 . Проверено 20 декабря 2020 .
- ^ «Блог Джулии» .
- ^ «Объявление о выпуске Julia 0.6» .
- ^ «Что такое Julia 0.7? Как оно соотносится с 1.0?» . JuliaLang . Проверено 17 октября 2018 года .
- ^ Дэвис, Эрик. «Написание итераторов в Julia 0.7» . julialang.org . Проверено 5 августа 2018 .
- ^ "Sys.isjsvm ([os])" . Язык Джулии. 20 августа 2019 . Проверено 20 августа 2019 .
Предикат для тестирования, если Джулия работает на виртуальной машине JavaScript (JSVM), включая, например, встраивание JavaScript WebAssembly в веб-браузер.
- ^ Безансон, Джефф; Карпинский, Стефан; Шах, Вирал; Эдельман, Алан. «Язык Джулии» . julialang.org . Проверено 13 декабря 2019 .
- ^ «поддержать [начало] для [firstindex (a)] от stevengj · Запрос на вытягивание # 33946 · JuliaLang / julia» . GitHub . Проверено 7 апреля 2020 .
- ^ quinnj. «Для структур со всеми полями isbits или isbitsunion разрешить их встроенное хранение в массивы · Запрос на извлечение # 32448 · JuliaLang / julia» . GitHub . Проверено 7 апреля 2020 .
Я до сих пор сталкиваюсь с проблемами, которые возникают изнутри, потому что это критическое изменение, которое меняет предположения, сделанные некоторыми пользователями, и вывод / кодогенерацию.
- ^ «Увеличьте выпуск Zlib BB до версии 'v1.2.11 + 10', которая включает оптимизацию '-O3' с помощью giordano · Pull Request # 35979 · JuliaLang / julia» . GitHub . Проверено 25 мая 2020 .
- ^ Фишер, Кено (2 мая 2020 г.). «Выход в Julia 1.5: Сообщение об ошибках в путешествиях во времени (Linux)» . julialang.org . Дата обращения 5 мая 2020 .
Накладные расходы на запись однопоточных процессов обычно ниже 2x, чаще всего от 2% до 50% (меньше для чисто численных расчетов, выше для рабочих нагрузок, взаимодействующих с ОС). Запись нескольких потоков или процессов, совместно использующих память (в отличие от передачи сообщений на основе ядра), сложнее. [..] Как и ожидалось, наихудшим нарушителем оказался тест потоков с накладными расходами около 600%.
- ^ Джефф Безансон, Стефан Карпински, Вирал Шах, Алан Эдельман и др. «Язык Джулии» . julialang.org . Дата обращения 14 августа 2020 .
Существуют некоторые ограничения, зависящие от размера, до которых могут быть выделены структуры в стеке, но на практике они вряд ли будут превышены.
CS1 maint: использует параметр авторов ( ссылка ) - ^ Джефф Безансон, Стефан Карпински, Вирал Шах, Алан Эдельман и др. «Язык Джулии» . julialang.org . Проверено 16 сентября 2020 года .CS1 maint: использует параметр авторов ( ссылка )
- ^ «Исправление проблем с проверкой стека C в 1.1, автор: simonbyrne · Запрос на извлечение # 293 · JuliaInterop / RCall.jl» . GitHub . Проверено 10 августа 2019 .
- ^ «JVM не загружается в 1.1 (JavaCall.jl) · Проблема № 31104 · JuliaLang / julia» . GitHub . Проверено 18 августа 2019 .
ДжеффБезансон изменил вехи: 1.3, 1.4.
- ^ «StackOverflowError в 'JavaCall.init' для Julia 1.1.0 · Проблема № 96 · JuliaInterop / JavaCall.jl» . GitHub . Проверено 21 октября 2019 года .
- ^ "ЮлияЛанг / Юлия" . GitHub . Проверено 7 января 2021 года .
- ^ Джефф Безансон, Стефан Карпински, Вирал Шах, Алан Эдельман и др. «Юлия 1.6 Основные моменты» . julialang.org . Проверено 26 марта 2021 года .CS1 maint: использует параметр авторов ( ссылка )
- ^ «Вехи - JuliaLang / julia» . Язык Джулии . Проверено 13 декабря 2019 .
- ^ "ЮлияЛанг / Юлия" . GitHub . Проверено 20 мая 2021 года .
- ^ "Обновление до OpenBLAS 0.3.13 · Запрос на включение # 39216 · JuliaLang / julia" . GitHub . Проверено 26 апреля 2021 года .
Учитывая, что 1.7 не так уж и далеко (запланированные релизы в будущем)
- ^ «ЮлиаКон 2017» . juliacon.org . Дата обращения 4 июня 2017 .
- ^ Фишер, Кено. «Проект Селеста» . juliacon.org . Проверено 24 июня 2017 года .
- ^ Регье, Джеффри; Памнани, Киран; Джордано, Райан; Томас, Роллин; Шлегель, Дэвид; МакОлиф, Джон; Прабат (2016). «Изучение астрономического каталога видимой Вселенной с помощью масштабируемого байесовского вывода». arXiv : 1611.03404 [ cs.DC ].
- ^ Кластер, Эндрю (12 сентября 2017 г.). «Юлия присоединяется к петафлоп-клубу» . Юлия Компьютинг (пресс-релиз).
Celeste полностью написана на языке Julia, и команда Celeste загрузила в совокупности 178 терабайт данных изображений, чтобы создать наиболее точный каталог из 188 миллионов астрономических объектов всего за 14,6 минут [..], что в 1000 раз увеличивает производительность в однопоточном исполнении. .
- ^ Шах, Вирал Б. (15 ноября 2017 г.). "Вирусный Б. Шах в Твиттере" . Проверено 15 сентября 2019 .
@KenoFischer говорит о Celeste в кинотеатре @Intel на @Supercomputing. 0,65 млн ядер, 56 ТБ данных, Cori - 6-й по величине суперкомпьютер в мире.
- ^ «Соавторы языка Julia выиграли премию Джеймса Х. Уилкинсона в области программного обеспечения для числовых вычислений» . MIT News . Проверено 22 января 2019 .
- ^ «Алан Эдельман из Массачусетского технологического института удостоен престижной награды IEEE Computer Society 2019 Sidney Fernbach | IEEE Computer Society» (пресс-релиз). 1 октября 2019 . Проверено 9 октября 2019 .
- ^ а б «Julia Computing и NVIDIA переносят вычисления на GPU Julia на вооружение» . juliacomputing.com . 3 декабря 2019 . Проверено 3 декабря 2019 .
- ^ Патель, Чинтан (19 ноября 2019 г.). «NVIDIA расширяет поддержку Arm с помощью контейнеров HPC, AI и визуализации на NGC | Блог NVIDIA» . Официальный блог NVIDIA . Проверено 3 декабря 2019 .
- ^ Circuitscape / Circuitscape.jl , Circuitscape, 25 февраля 2020 г. , данные получены 26 мая 2020 г.
- ^ «Сохранение через кодирование: 5 вопросов к Виральному Шаху | Управление научной миссии» . science.nasa.gov . Проверено 26 мая 2020 .
- ^ JuliaSpace / SatelliteToolbox.jl , JuliaSpace, 20 мая 2020 г. , получено 26 мая 2020 г.
- ^ «Юлия: проект, спонсируемый NumFOCUS с 2014 года» . numfocus.org . Проверено 29 сентября 2020 года .
- ^ «Язык Джулии» . julialang.org . Проверено 22 сентября 2019 .
- ^ Чимпану, Каталин. «Mozilla финансирует способ поддержки Джулии в Firefox» . ZDNet . Проверено 22 сентября 2019 .
- ^ «Юля в Йодиде» . alpha.iodide.io . Проверено 22 сентября 2019 .
- ^ «Языковые плагины - документация Iodide» . iodide-project.github.io . Проверено 22 сентября 2019 .
- ^ «Гранты Mozilla Research Grants 2019H1» . Mozilla . Проверено 22 сентября 2019 .
запуск языковых интерпретаторов в WebAssembly. Чтобы еще больше расширить доступ к ведущим инструментам науки о данных, мы ищем кого-нибудь, кто бы портировал R или Julia в WebAssembly и попытался предоставить языковой плагин уровня 3 для Iodide: автоматическое преобразование базовых типов данных между R / Julia и Javascript, а также возможность совместного использования экземпляров класса между R / Julia и Javascript.
- ^ «Грамотные научные вычисления и общение в сети: йодид-проект / йодид» . йодид. 20 сентября 2019 . Проверено 22 сентября 2019 .
Мы представляем себе будущий рабочий процесс, который позволит вам изменять данные в Python, подбирать быструю модель в R или JAGS, решать некоторые дифференциальные уравнения в Julia, а затем отображать ваши результаты с помощью интерактивной визуализации d3 + JavaScript в реальном времени ... и все такое. это в одном переносном, доступном для совместного использования и взломанном файле.
- ^ «О нас - Юлия Компьютинг» . juliacomputing.com . Проверено 12 сентября 2017 года .
- ^ «Джулия Компьютинг привлекает 4,6 миллиона долларов в виде начального финансирования» . Архивировано из оригинального 10 мая 2019 года.
- ^ «Джулия Компьютинг получила грант в размере 910 000 долларов от Фонда Альфреда П. Слоана, включая 160 000 долларов на развитие STEM» . juliacomputing.com . 26 июня 2017 . Проверено 28 июля 2020 .
- ^ «ДИФФЕРЕНЦИАЛЬНЫЙ - проектный интеллект, способствующий значительному снижению энергопотребления (и) создание новых, полностью эффективных усовершенствований передовых технологий» (PDF) .
- ^ «Язык Джулии» (официальный сайт).
Универсальное назначение [..] Julia позволяет писать пользовательские интерфейсы, статически компилировать код или даже развертывать его на веб-сервере.
- ^ Грин, Тодд (10 августа 2018 г.). "Низкоуровневое системное программирование на высоком уровне Джулия" . Архивировано из оригинала на 5 ноября 2018 года . Проверено 5 ноября 2018 .
- ^ Мосс, Роберт (26 июня 2015 г.). «Использование Julia в качестве языка спецификации для системы предотвращения столкновений в воздухе нового поколения» (PDF) . Архивировано 1 июля 2015 года . Проверено 29 июня 2015 года .
Бортовая система предотвращения столкновений
- ^ Анайя, Ричард (28 апреля 2019 г.). «Как создать многопоточный HTTP-сервер в Юлии» . Средний . Проверено 25 июля 2019 .
Таким образом, несмотря на то, что в настоящее время у Джулии нет готового решения для многопоточного сервера, мы можем легко воспользоваться его функциями распределения процессов и очень популярной технологией балансировки нагрузки, чтобы полностью использовать ЦП для обработки HTTP.
- ^ Антофф, Дэвид (1 июня 2019 г.). "Установка Node.js для Юлии" . Проверено 25 июля 2019 .
- ^ а б «Перевести Юлию на JavaScript» . JuliaGizmos. 7 июля 2019 . Проверено 25 июля 2019 .
- ^ "PyCall.jl" . stevengj . github.com.
- ^ «Использование PyCall в julia на Ubuntu с python3» . julia-users в группах Google .
для импорта модулей (например, python3-numpy)
- ^ "Интерфейс Python для Юлии" .
- ^ а б «Узнай Юлию за Y минут» . Learnxinyminutes.com . Проверено 31 мая 2017 года .
- ^ «GitHub - JuliaLang / PackageCompiler.jl: скомпилируйте свой пакет Julia» . Язык Джулии. 14 февраля 2019 . Проверено 15 февраля 2019 .
- ^ "Юлия REPL · Язык Джулии" . docs.julialang.org . Проверено 22 сентября 2019 .
- ^ «Представляем Юлию / REPL - Викиучебники, открытые книги для открытого мира» . en.wikibooks.org . Проверено 22 сентября 2019 .
вы можете установить пакет Julia OhMyREPL.jl ( github .com / KristofferC / OhMyREPL .jl ), который позволяет настраивать внешний вид и поведение REPL
- ^ «Начало работы · Язык Джулии» . docs.julialang.org . Проверено 15 августа 2018 .
- ^ См. Также: docs .julialang .org / en / v1 / manual / strings / для интерполяции строк и
string(greet, ", ", whom, ".\n")
пример предпочтительных способов объединения строк. У Джулии есть функции println и print, а также макрос @printf (т. Е. Не в форме функции) для устранения накладных расходов на форматирование во время выполнения (в отличие от той же функции в C). - ^ «Юлия Документация» . JuliaLang.org . Проверено 18 ноября 2014 года .
- ^ «Проект Юпитер» .
- ^ Будро, Эммет (16 октября 2020 г.). "Может ли Плутон быть настоящей заменой Юпитера?" . Средний . Проверено 8 декабря 2020 .
- ^ «Джулия и Спарк, лучше вместе» . juliacomputing.com . 2 июня 2020 . Дата обращения 14 июля 2020 .
- ^ «Поддержка Unicode 13 от stevengj · Запрос на извлечение № 179 · JuliaStrings / utf8proc» . GitHub . Проверено 29 марта 2020 года .
- ^ "JuliaRegistries / General" . Проверено 30 апреля 2020 .
- ^ «Pkg.jl - Артефакты» . Дата обращения 4 июня 2020 .
- ^ «Pkg.jl - Реестры» . Проверено 30 апреля 2020 .
- ^ Фарбер, Роб (28 ноября 2017 г.). «Julia Language обеспечивает производительность высокопроизводительных вычислений на уровне петаскейла» . Следующая платформа . Проверено 22 апреля 2020 .
- ^ Кинкейд, Кэти (11 ноября 2016 г.). «Усовершенствования Celeste создают новые возможности в исследованиях неба» . Лаборатория Беркли . Проверено 22 апреля 2020 .
- ^ Фрэнсис, Майкл (9 мая 2017 г.). «OS @ BLK: Юлия NamedTuples» . BlackRock Engineering . Проверено 22 апреля 2020 .
- ^ Безансон, Джефф (6 июня 2019 г.). "ДжеффБезансон / фемтолисп" . GitHub . Проверено 16 июня 2019 .
- ^ «Джулия: быстрый динамический язык для технических вычислений» (PDF) . 2012 г.
- ^ «Как заставить Python работать так же быстро, как Джулия» . 2015 г.
- ^ «Базовое сравнение Python, Julia, R, Matlab и IDL» . 2015 г.
- ^ Гиббс, Марк (9 января 2013 г.). «Pure и Julia - классные языки, которые стоит попробовать» . Сетевой мир (колонка) . Проверено 7 февраля 2013 года .
- ^ «Проблема отслеживания Darwin / ARM64. · Проблема № 36617 · JuliaLang / julia» . GitHub . Проверено 8 декабря 2020 .
- ^ Карлтон, Сэм (8 декабря 2020 г.), ThatGuySam / Doesitarm , получено 8 декабря 2020 г.
- ^ "Юлия Загрузки" . julialang.org . Дата обращения 17 мая 2019 .
- ^ «Перенести код Julia во встроенное оборудование (ARM)» . JuliaLang . 23 января 2019 . Проверено 30 марта 2021 года .
- ^ "julia / arm.md" . Язык Джулии. 29 ноября 2019 . Проверено 29 ноября 2019 года .
Доступен
список известных проблем для ARM.
- ^ «Юля на ТПУ» . ЮлияТПУ. 26 ноября 2019 . Проверено 29 ноября 2019 года .
- ^ «AMD ROCm · JuliaGPU» . juliagpu.org . Проверено 20 апреля 2020 года .
- ^ 262588213843476. «Сборка Julia для RaspberryPi Zero» . Суть . Дата обращения 14 августа 2020 .CS1 maint: числовые имена: список авторов ( ссылка )
- ^ «Джулия Берри: Джулия на Raspberry Pi» . juliaberry.github.io . Дата обращения 14 августа 2020 .
- ^ «Джулия доступна в Raspbian на Raspberry Pi» .
Джулия работает со всеми вариантами Pi, мы рекомендуем использовать Pi 3.
- ^ «Язык Джулии для Raspberry Pi» . Фонд Raspberry Pi .
- ^ "Используете Джулию на Android?" . JuliaLang . 27 сентября 2019 . Дата обращения 2 октября 2019 .
дальнейшее чтение
- Нагар, Сандип (2017). Начало Джулии Программирование: для инженеров и ученых . Springer. ISBN 9781484231715.
- Безансон, Дж; Эдельман, А; Карпинский, С; Шах, В. Б. (2017). «Юлия: свежий подход к численным вычислениям». SIAM Обзор . 59 (1): 65–98. arXiv : 1411.1607 . CiteSeerX 10.1.1.760.8894 . DOI : 10.1137 / 141000671 . S2CID 13026838 .
- Джоши, Аншул (2016). Джулия для науки о данных - исследуйте мир науки о данных с нуля вместе с Джулией . Packt. ISBN 9781783553860.
Внешние ссылки
- Официальный веб-сайт
- julia на GitHub