КДПВ
КДПВ

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

А чтобы подогреть ваш интерес, мы подготовили небольшую статью (опирались на этот материал, спасибо авторам, и добавили много тезисов на основе нашего опыта с Julia) с описанием основных причин, почему вы должны срочно заинтересоваться Julia и подать заявку на Летнюю школу. Приятного чтения!

Язык Julia – новая звезда во вселенной программирования, получившая признание благодаря своей универсальности. Он быстрый, у него удобный синтаксис и он отлично подходит для научных вычислений в различных областях, от анализа данных до расчета прочности зданий.

Недавно Julia дебютировала в TIOBE Index – рейтинге популярности языков программирования, который основывается на результатах поисковых систем, дискуссионных форумах и других ресурсах. В этой статье мы расскажем о шести причинах добавить сертификат по Julia в ваше резюме, приведем небольшое сравнение Julia с Python и MATLAB, а также порассуждаем о будущем этого нового языка.

Рост популярности Julia можно проследить на этом графике:

Источник

3 причины популярности языка Julia

  • Сочетает в себе скорость выполнения языка C и динамическую типизацию MATLAB/Python. Причина: Julia, является компилируемым языком программирования, в отличие от MATLAB и Python.

  • Позволяет преодолеть разрыв между высокоуровневым и низкоуровневым программированием за счёт простого синтаксиса, схожего с Python и MATLAB.

  • Реализует современные технологии программирования. Например, концепция перегрузки функций расширена до мультиметодов, а код обрабатывается как структура данных, что очень упрощает метапрограммирование. О да, и он позволяет использовать любые unicode-символы в коде, а не только ASCII…

К тому же сообщество разработало библиотеки для любой сферы расчетов, от нейросетей до квантовой физики, а пакетный менеджер этого языка прост в обращении, как conda и pip.

Julia – это скорость 

Одно из главных преимуществ Julia – ее скорость. Разработанная так, чтобы быть такой же быстрой, как языки, C и Fortran, Julia обеспечивает высокопроизводительные вычислительные возможности, которые так важны в современном мире интенсивных данных.

Высокая скорость работы Julia в первую очередь объясняется ее компилятором Just-In-Time (JIT). Это позволяет Julia компилировать эффективный нативный код, что делает его подходящим выбором для выполнения сложных алгоритмов на реальном оборудовании.

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

Источник: статья, посвященная сравнению скорости различных языков: https://modelsandrisk.org/appendix/speed_2022/ 

Julia удобна для пользователя

Синтаксис Julia дружелюбен к пользователям Python и MATLAB, то есть на нем удобно программировать тем, кто уже знаком с этими языками. Читайте – если вы знаете Python/MATLAB, то вы практически знаете Julia, нужно только погрузиться. Также, если сравнивать синтаксис напрямую с MATLAB, то значительные различия можно пересчитать по пальцам, они описаны тут.

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

Синтаксис Julia интуитивно понятен и прост в изучении. Переменные можно присваивать без объявления их типа, язык поддерживает все распространенные алгоритмические структуры (циклы, условия), все распространенные структуры данных (многомерные матрицы, словари), а для сложных типов данных полно бесплатных библиотек.

Julia имеет сильную экосистему пакетов

Julia предоставляет мощную экосистему пакетов, которые расширяют ее функциональность. Пакеты Flux, MLJ и Knet предоставляют мощные инструменты для машинного обучения и глубокого обучения.

> В Экспоненте мы используем Julia для тяжеловесных инженерных задач, и мы хотели бы подсветить несколько таких пакетов, чтобы всем было легче найти ссылки и начать решать задачи по системам управления, обработке сигналов и т.д.

DataFrames.jl – это пакет Julia, который работает с данными аналогично Python'овскому pandas. Он предоставляет набор инструментов для управления данными и статистического анализа, что делает его ценным помощником для специалистов по обработке данных.

Flux.jl и Lux.jl – вполне мощные пакеты для глубокого обучения. Написаны полностью на Julia, что позволяет создавать пользовательские слои и модели непосредственно в Julia.

Пакет JuliaControl – множество библиотек для разработки САУ, внутри которого находятся:

  • ControlSystems.jl – функциональный пакет для систем автоматического управления. процедуры для анализа и синтеза систем управления (в первую очередь линейных);

  • RobustAndOptimalControl.jl содержит более сложные функции для проектирования ЛКГ, глубокого анализа и синтеза, нечеткого моделирования, а также именованные системы и интерфейс для взаимодействия с DescriptorSystems.jl;

  • SymbolicControlSystems.jl содержит базовые возможности для генерирования кода на C для линейных систем;

  • ControlSystemIdentification.jl — это инструментарий для идентификации линейных систем с постоянными параметрами (ЛПП) с использованием данных временной или частотной области. Этот пакет позволяет на основе данных оценивать модели пространства состояний, модели передаточных функций и фильтры Калмана, которые могут применяться для расчета систем управления;

  • DiscretePIDs.jl содержит эталонную реализацию дискретного ПИД-регулятора в Julia, включая весовые уставки, ограничение насыщения интегратора, дифференциальную фильтрацию и мягкую передачу управления.

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

DSP.jl – это пакет, предоставляющий широкий спектр возможностей цифровой обработки сигналов (ЦОС), что делает его подходящим для применения в различных областях, требующих анализа сигналов.

Polynomials.jl – это пакет, предназначенный для работы с полиномами. Он предлагает такие функции, как арифметические операции, интегрирование, дифференцирование, оценка коэффициентов, нахождение корней и аппроксимация данных.

Jump.jl – это специализированный язык моделирования для математической оптимизации, интегрированный в язык программирования Julia. Он позволяет пользователям формулировать и решать различные задачи оптимизации, включая линейное, смешанное целочисленное и нелинейное программирование.

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

Julia в научных вычислениях и моделировании

Самый крупный пакет для моделирования и симуляции в экосистеме Julia называется SciML. Он объединяет мощные инструменты для научных расчетов (Sci) и машинного обучения (ML) – всё что нужно для работы с математическими моделями. Посмотрим, какие библиотеки входят в этот проект.

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

  • ModelingToolkit.jl (MTK) – это целый язык (надстройка над Julia) для высокопроизводительных символьно-числовых вычислений. Что он позволяет делать? Решать алгоритмические и акаузальные задачи, заданные при помощи символьного описания, в общем – легко расширяемые модели. Инструментарий MTK позволяет их анализировать, преобразовывать – например, снижая порядок, и передавать в DifferentialEquations для решения.

В SciML входит еще масса инструментов моделирования (финансы, астрофизика, агенты…), аналитических инструментов, и, конечно, инструменты для машинного обучения (всё – от дифференцируемых суррогатных моделей до нейросетей). А ведь мы помним, что машинное обучение тоже работает с моделями, только делает их из данных.

Таким образом Julia, имея в своём арсенале все эти библиотеки, дает море возможностей для построения сложных моделей в инженерных и наукоемких областях.

Julia может сыграть ключевую роль в IT-трансформации науки

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

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

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

Julia обладает большим потенциалом для инноваций в области ИИ

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

Такие пакеты, как Flux.jl, SciML и Knet, расширяют простор для инноваций в вашей области с помощью Julia. Эти пакеты предоставляют мощные инструменты для машинного обучения и глубокого обучения, помогая вам прокладывать путь к внедрению передовых решений в области ИИ.

Julia – это развитое сообщество, в том числе в России

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

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

Julia или Python: Как выбрать?

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

Python – язык общего назначения, простой в изучении, с обширной экосистемой, большим сообществом. Но если ваш проект связан с тяжелыми численными и научными вычислениями, требует высокой производительности, и вас устраивает небольшое, но специализированное сообщество, лучше выбрать Julia.

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

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

Будущее Julia

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

Будучи языком с открытым исходным кодом, Julia постоянно развивается, регулярно приростая новыми функциями и улучшениями. А следить за нововведениями интересно и студентам, и преподавателям. Для одних важно, что в Julia постоянно реализуются самые новые требования мира программирования, для других – что новые курсы всегда будут востребованы.

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

Бонусная причина: Julia лучше всех языков обрабатывается с помощью ChatGPT

Согласно одному из исследований оказалось, что «ChatGPT лучше всего генерирует код на Julia. Для довольно большого перечня задач, сгенерированный код на Julia успешно выполнялся в 81,5% случаев. Хуже всего – на C++, где успешно выполняется только 7,3 %. В частности, эта модель вообще лучше работала на высокоуровневых динамически типизированных языках (Javascript, Julia, Perl, Python, R, Ruby, Smalltalk), чем на низкоуровневых статически типизированных языках (C, C++, Go)».

Верно, из всех языков «ChatGPT лучше всего пишет код на Julia». К чему бы это? :)

Прочитать об этом исследовании подробнее вы можете по ссылке: 

https://www.juliabloggers.com/chatgpt-performs-better-on-julia-than-python-and-r-for-large-language-model-llm-code-generation-why/ 

Часто задаваемые вопросы

Как появилась Julia?

Julia была разработана в Массачусетском технологическом институте и впервые появилась в 2012 году, но начала набирать обороты только после стабильного выпуска Julia 1.0 в 2018 году.

А вообще Julia часто используется?

Julia используется в научных вычислениях и численном моделировании, высокопроизводительных вычислениях (HPC), анализе и визуализации данных (Plots.jl), машинном обучении и глубоком обучении (Flux.jl), а также в параллельных и распределенных вычислениях.

В честь чего или кого названа Julia?

По словам разработчиков, она не была названа в честь кого бы то ни было.

Если тема заинтересовала и хочется узнать больше, регистрируйтесь в Летнюю школу Julia, это бесплатно.

Комментарии (6)


  1. freegemini
    26.07.2024 13:57
    +3

    Сочетает в себе скорость выполнения языка C и динамическую типизацию MATLAB/Python. Причина: Julia, является компилируемым языком программирования, в отличие от MATLAB и Python

    Позволяет преодолеть разрыв между высокоуровневым и низкоуровневым программированием за счёт простого синтаксиса, схожего с Python и MATLAB

    И вот тут бы пару-тройку примеров этого языка...

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


    1. Tzimie
      26.07.2024 13:57
      +1

      Вот пример где я вытягивал максимальную скорость

      https://habr.com/ru/articles/706228/


  1. Tzimie
    26.07.2024 13:57
    +1

    Система макросов конечно потрясающая. Julia, перепиши этот цикл на параллелизм, а вот эту часть на использование векторных инструкций ..


  1. upcFrost
    26.07.2024 13:57

    Матлаб компилируемый, на нем часто делают как минимум прототипы фичей для смарт-часов и подобной техники


  1. Octabun
    26.07.2024 13:57
    +2

    Дело, конечно, прошлое... но всё-таки...

    Писать про Julia так, как если бы это был просто ещё один язык программирования - не вполне честно. Сейчас "язык программирования" воспринимается однозначно - как средство создания приложений. Julia работает в этом направлениии, но точно не засучив рукава. Julia - средство решения задач, похоже с упором на вычисления, без создания приложения - у кого задача, тот и программист.

    Так и было, я помню, пока людям платили деньги за решённые задачи, и так перестало быть когда появился посредник в лице индустрии программирования и человек с задачей лишился непосредственного доступа к способной её решить машине, но перестало быть не до конца. Если сравнивать Julia, то скорее с Racket, которая пока жива и которую обязательно нужно рассмотреть прежде яем заниматься Julia, с Emacs с его Emacs Lisp, который считай умер, особенно как нечто большее чем редактор, и только потом с Python, который сейчас царствует, но каксредство решения личных задач сильно уступает Julia, в том числе потому, что последняя может использовать и его пакеты.

    Критерий различия прост - приходит программист и говорит - моя сделаль! Если имеется в виду приложение - один мир, если библиотека - другой.

    В этом году Экспонента вместе со средой разработки Engee стали информационными партнерами бесплатной Летней школы Julia.

    И, согласно моему чутью маркетолога, реклами Engee и есть цель затеи. И это правиотно - то, чем кажется Engee с первого взгляда, просто обязано быть с Julia много лучше чеи без неё. Скорее всего, и наоборот тоже.

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

    Не вижу почему это не так. Однако, появляется предварительное условие изучения Julia - членство в научных и инженерных средах.

    Недавно Julia дебютировала в TIOBE Index
    – рейтинге популярности языков программирования, который основывается
    на результатах поисковых систем, дискуссионных форумах и других ресурсах

    И да, по ссылке мы видим Julia на 34-ом месте. Это точно достижение? Да и индекс становится всё страньше и страньше по мере удаления от топа, разве естественно выгдядит сильно опережающая Julia последовательность Delphi/Pascal > Rust > Ruby > PHP > Swift > Kotlin? А полезной эта последовательность точно выглядит?

    Рост популярности Julia можно проследить на этом графике:

    И мучаться вопросом - что же произошло в годах 2017 и 2021 и происходит прямо сейчас? Приводя такой график, особенно аудитории склонной к Julia, автор обязан поделиться хотя-бы предположениями.

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

    Тут по классике - либо крестик снять, либо трусы надеть. Шансы что программист на Python увидит вызов функции на Julia и неверно укажет какой код будет выполняться - я бы оценил как высокие для нетривиального проекта.

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

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

    Верно, из всех языков «ChatGPT лучше всего пишет код на Julia». К чему бы это? :)

    Наверно потому, что на Julia меньше очень плохого кода путать ChatGPT. Как это ни объясняй, для "войти в АйТи" - получается одновременно и преимущество и недостаток.

    И забыл - у Julia не такая уж и широкая поддержка платформ. Что в Termux готового пакета нет - это ладно, но бросается в глаза что лучше всего сидеть на Интел и Линукс с картой nVidia.


    1. n_kapyrin
      26.07.2024 13:57

      лучше всего сидеть на Интел и Линукс с картой nVidia

      Не совсем правда... Конечно в Julia есть байндинги для openCL. Я сижу на windows и локально работаю с Julia через Jupyter (расшифровывается... Julia, Python R). И вот мой опыт: недавно писал для коллег идентичный код на Julia и на Python (взятие классических метрик от большого набора текста, вывод HTML). Запрототипировал на Julia, но пайплайн оказался на Python. Скорость выполнения на Julia была раз в 15 выше, чем на Python.

      И да, по ссылке мы видим Julia на 34-ом месте

      Список довольно турбулентный, языки этой категории часто перепрыгивают на десятки мест. Доказательство – пару лет назад Julia была номер 20. Как вы видите, согласно TIOBE топовый язык мат.моделирования – это Fortran. Но так не дожно быть :)

      Можно поискать более сложные гипотезы. Например, отсеять языки, пригодные для вашей сферы (скажем, техника/инженерия/прикладная математика в промышленном масштабе), и тогда Julia идет сразу после MATLAB (который потомок Fortran). Python, при всей моей любви к нему, требует очень много интуиции программиста, там математикам приходится переучиваться на кодеров.

      что же произошло в годах 2017 и 2021 и происходит прямо сейчас... автор обязан поделиться хотя-бы предположениями

      Боюсь что ни у кого не будет предположений о том, почему в индексе были небольшие скачки популярность Julia в эти годы. Турбулентный индекс, да и всё...

      программисты эти нужны в последнюю очередь

      Если воспринимать MATLAB как специальность, а не как продукт, то спрос на MATLAB-программистов не падает. Продакшен и саппорт – вообще другие миры, Julia для них хорош, но это ничего не говорит о спросе на программистов по Julia. Если вопрос стоит – учить Си или нет, то тут тоже каждый решает за себя. Как алгоритмическая база – отлично. Если надо пахать над моделями и нет времени отвлекаться – то не стоит.

      Julia меньше очень плохого кода путать ChatGPT

      В статье сообщаются и другие догадки, например что LLM отучили генерировать продакшен-код для инфобез-приложений, вот она и упирается