MIT официально выпустил язык программирования Julia 1.0: Python, R, C++ три в одном

искусственный интеллект Python Язык программирования C++ Julia
MIT официально выпустил язык программирования Julia 1.0: Python, R, C++ три в одном

Язык Julia, разработанный Массачусетским технологическим институтом, является одним из самых быстрорастущих языков программирования в мире, его скачали более 2 миллионов раз, включая разработчиков из различных ведомств, включая Google, Facebook, FAA и Министерство энергетики США. Недавно лаборатория MIT CSAIL официально выпустила Julia 1.0, язык, который должен сочетать в себе скорость C, математическое представление Matlab, общее программирование Python и склеивающую командную строку Shell, а также создавать бесплатное и удобное программирование с открытым исходным кодом. язык.

За последний год исследователи использовали Джулию для анализа астрономических изображений на суперкомпьютере в 1000 раз быстрее, классифицируя почти 200 миллионов небесных объектов за 15 минут. С технической точки зрения этот язык еще долго будет развиваться. Однако настал знаменательный момент: на этой неделе на конференции Julia Language Conference в Лондоне была официально выпущена версия Julia 1.0! JuliaCon тоже выйдет вместе.

«Выпуск Julia 1.0 доказывает, что язык готов сочетать эффективность и простоту использования Python и R», — сказал Алан Эдельман, профессор Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института (CSAIL), один из разработчиков Джулии. в сочетании с молниеносной скоростью C++, чтобы изменить мир технологий».

На практике Julia уже используется в беспилотных автомобилях, роботах и ​​3D-принтерах, а также в точной медицине, дополненной реальности, геномике и управлении рисками. С точки зрения экосистемы Julia ее основными функциями или областями применения являются визуализация данных, общий пользовательский интерфейс и веб-сайт, наука о данных, машинное обучение, научные вычисления и параллельные вычисления.

В настоящее время Julia была загружена 2 миллиона раз, а сообщество Julia разработало более 1900 пакетов расширений. Эти пакеты расширения содержат широкий спектр математических библиотек, математических инструментов и библиотек для вычислений общего назначения. Кроме того, язык Julia может легко использовать библиотеки Python, R, C/C++ и Java, что значительно расширяет возможности использования языка Julia.


Julia 1.0

Долгожданная версия Julia 1.0 стала результатом почти десятилетнего труда разработчиков. На JuliaCon2018 состоялось мероприятие по запуску, и сообщество официально установило версию 1.0.0.

Разработчики Julia выдвинули множество требований к языку:

Нам нужен был очень свободный язык с открытым исходным кодом, обладающий скоростью C и гибкостью Ruby. Нам нужен был гомологический язык с настоящими макросами, как у Lisp, и простой для понимания математической нотацией, как у Maltlab. Это полезный язык программирования общего назначения, такой как Python, дружественный к статистике язык, такой как R, естественный язык обработки строк, такой как Perl, мощный язык линейной алгебры, такой как Matlab, и «связующий язык», такой как оболочка. Его легко освоить, но он порадует даже самых требовательных хакеров. Мы хотим, чтобы он был и интерактивным, и компилируемым.

Вокруг языка процветает процветающее сообщество, и люди во всем мире постоянно изобретают и улучшают Джулию с той же целью. Более 700 человек внесли существенный вклад в Julia, и бесчисленное множество других создали тысячи замечательных пакетов с открытым исходным кодом для Julia. Таким образом, мы создали такой язык:

  • Быстрота: Julia создана для высокой производительности. Программы Julia компилируют эффективный нативный код для нескольких платформ с помощью LLVM.

  • Универсальный: он использует множественную диспетчеризацию в качестве парадигмы, что упрощает выражение многих объектно-ориентированных и функциональных шаблонов программирования. Стандартная библиотека обеспечивает асинхронный ввод-вывод, управление процессами, ведение журналов, профилирование, менеджеры пакетов и многое другое.

  • Динамический: Julia — это динамический язык, похожий на язык сценариев, который поддерживает интерактивное использование.

  • Особенности: Он хорош в числовых вычислениях, его синтаксис подходит для математики, он поддерживает несколько типов числовых данных и имеет хороший параллелизм. Множественная диспетчеризация Джулии естественным образом подходит для определения числовых и массивоподобных типов данных.

  • Разнообразие. В Julia имеется богатый набор описательных типов данных, а объявления типов делают программы связными и стабильными.

  • Компонуемость: пакеты Джулии хорошо сочетаются друг с другом. Матрицы количества единиц или списки данных для валют и цветов можно комбинировать — и они работают хорошо.

Версия Julia 1.0 теперь доступна для скачивания. Если вы обновляете свой код с Julia 0.6 или более ранней версии, мы рекомендуем вам сначала использовать переходную версию 0.7, которая содержит предупреждения об устаревании, помогающие управлять процессом обновления. Если ваш код работает без предупреждений, то вы можете просто перейти на версию 1.0 без каких-либо функциональных изменений. Зарегистрированные пакеты используют промежуточный выпуск 0.7 и выпустили совместимое обновление для 1.0.

Конечно, одной из самых важных новых функций в Julia 1.0 является приверженность стабильности API языка: код, написанный для Julia 1.0, может продолжать работать на Julia 1.1, 1.2 и т. д. Язык является «полноценным», и как разработчики основного языка, так и сообщество могут создавать новые пакеты, инструменты и функции на основе этой прочной основы.

Julia 1.0 — это не только стабильность, но и несколько новых мощных и инновационных функций языка. Новые функции начиная с версии 0.6 заключаются в следующем.Более подробное и точное содержание можно найти в исходном тексте обновленного документа:

  • Новый встроенный менеджер пакетов значительно повышает производительность Julia 1.0 и упрощает установку пакетов и зависимостей. Он также поддерживает среды пакетов для каждого проекта и записывает явное состояние рабочих приложений, чтобы делиться ими с другими (и вашими будущими проектами). Наконец, новый дизайн также полностью поддерживает приватные пакеты и репозитории пакетов. Вы можете использовать те же инструменты для установки и управления вашими частными пакетами для экосистемы пакетов с открытым исходным кодом. Презентационное видео на JuliaCon дает хороший обзор нового дизайна и поведения.

  • У Джулии есть новое стандартное представление пропущенных значений. Разрешение на представление и обработку отсутствующих данных имеет основополагающее значение для статистики и науки о данных. В типичной форме программирования на Джулии новое решение является общим, компонуемым и производительным. Любой общий тип кластеризации может эффективно поддерживать отсутствующие значения, если элементы могут содержать отсутствующие предопределенные значения. Производительность таких «однородно типизированных» кластеров, возможно, была очень низкой в ​​прошлых версиях, но сегодняшние улучшения компилятора позволили Джулии соответствовать скорости пользовательских представлений отсутствующих значений C или C++ в других системах, сохраняя при этом универсальность. прошлая версия.

  • Встроенный тип String теперь может безопасно поддерживать произвольные данные. Ваша программа не будет тратить часы или дни на работу из-за одного недостающего байта недопустимого Unicode. Все строковые данные сохраняются с указанием допустимых или недопустимых символов, что позволяет вашему приложению безопасно и легко обрабатывать реальные данные со всеми их неизбежными недостатками.

  • Вещание стало основной функцией языка благодаря удобным синтаксическим функциям и стало более мощным, чем в прошлом. В Julia 1.0 можно легко распространить широковещательную рассылку на пользовательские типы и включить эффективные оптимизированные вычисления на графических процессорах и другом векторизованном оборудовании, заложив основу для повышения производительности в будущем.

  • Именованные массивы — это новая функция языка, которая делает представление данных и доступ к ним более эффективным и удобным за счет именования. Например, вы можете представить строку данных как row = (name="Julia", version=v"1.0.0", releases=8) и использовать row.version для доступа к столбцу версии, который совпадает с менее удобный ряд [2] имеют ту же производительность.

  • Оператор точки теперь перегружается и позволяет типам принимать значения, отличные от получения и установки полей с использованием синтаксиса obj.property. Это полезно для более плавного взаимодействия между объектно-ориентированными языками, такими как Python и Java. Перегрузка метода доступа к свойствам также позволяет синтаксису для получения столбца данных соответствовать синтаксису именованных кортежей: вы можете написать table.version для доступа к столбцу версии в таблице, точно так же, как вы использовали бы row.version для доступа к полю версии строки. .

  • Оптимизатор Julia во многих отношениях лучше, чем перечисленные нами функции, но вот лишь несколько основных моментов. Оптимизатор теперь может распространять константы через вызовы функций, тем самым устраняя мертвый код и обеспечивая статическую оценку лучше, чем раньше. Компиляторы также лучше избегают выделения краткосрочных оболочек для долгосрочных целей, что позволяет разработчикам использовать удобные высокоуровневые абстракции без снижения производительности.

  • Теперь можно вызывать самих себя, объявляя конструкторы типов параметров, что устраняет путаницу и двусмысленность в синтаксисе языка.

  • Полностью перепроектировать протокол итерации, чтобы упростить реализацию нескольких итераций. Вместо того, чтобы разрабатывать методы для трех разных универсальных функций (начать, далее, выполнить), Julia 1.0 разрабатывает методы с одним и двумя аргументами для функции итерации. Это часто позволяет легко определять итерации в начальном состоянии с помощью одного определения, содержащего значения по умолчанию. Что еще более важно, это позволяет реализовать итераторы, которые узнают, что они были реализованы, только после неудачной попытки создать значение. Эти итераторы очень распространены в шаблонах ввода/вывода (I/O), сетях и шаблонах производитель/потребитель, и Джулия может выразить эти итераторы простым и точным способом.

  • Правила области действия упрощены. Конструкции локальной области теперь можно использовать согласованно, независимо от того, существует ли уже именованное глобальное ограничение.

  • Сам язык Julia очень хорошо учится, и многие компоненты разделены и упакованы в пакеты «стандартной библиотеки» Julia, а не являются частью «базового» языка. Если они вам нужны, вы можете их импортировать (установка не требуется). В будущем будет несколько версий стандартной библиотеки и обновлений независимо от Джулии, что позволит им выполнять итерации быстрее.

  • Мы полностью пересмотрели все API Джулии, чтобы повысить стабильность и удобство использования. Многие малопонятные и недопустимые шаблоны программирования были переименованы или реорганизованы, чтобы лучше соответствовать возможностям Джулии. Это делает обработку коллекций более стабильной и согласованной, гарантируя, что порядок параметров соответствует согласованным стандартам языка Julia, и включает (более быстрые) параметры ключевых слов в API, где это необходимо.

Многие новые внешние пакеты теперь специально созданы для новых функций Julia 1.0, таких как улучшения в экосистеме обработки данных и операций, а также улучшенная поддержка гетерогенных архитектур.

Julia 1.0 также включает множество других улучшений, полный список которых можно найти на странице:docs.fromAwolf.org/en/release-…