Julia готова для прода

Автор оригинала: Bogumił Kamiński
  • Перевод


автор картинки


Сейчас мне хочется поделиться своими выводами сделанными после нескольких бесед, в которых я участвовал на JuliaCon 2020.


Я потратил уже 20 лет на развертывание в корпоративных средах проектов связанных с наукой о данных (тогда она так еще не называлась, но мы уже обучали нейронные сети делать прогнозы), и у меня есть много коллег, которые глубоко занимаются разработкой корпоративного программного обеспечения. Процитирую Томаша Ольчака, который воистину является армией из одного человека во время реализации сложных корпоративных проектов:


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

В течение многих лет я бы с этим согласился, но после JuliaCon 2020, я думаю, мы можем с уверенностью заявить, что


Джулия готова идти в производство!


Позвольте мне теперь привести список ключевых (на мой взгляд) презентаций, сделанных во время JuliaCon 2020, которые заставили меня сделать этот вывод.


Я не буду комментировать здесь функциональные возможности, связанные с числодробительством, так как ясно, что Джулия на этом поприще блистает, посему, хотелось бы сосредоточиться на вещах, которые делают Джулию отличным инструментом для внедрения в разработку (все же я пропускаю много интересных докладов в этой области — ознакомьтесь с подробной программой, чтобы узнать больше).


Создание микросервисов и приложений


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


Еще будет интересно:


  • Доклад по характеристикам приложений, где Кристоффер Карлссон покажет как создать исполняемые файлы, которые могут быть запущены на машинах, на которых не установлена Julia.
  • Презентация Julia for scripting, в ходе которой Фредрик Экре обсуждает лучшие практики использования Julia в контекстах, где вам нужно много раз выполнять короткие фрагменты кода.
  • Доклад Genie.jl, в котором Адриан Сальчану показывает зрелый, стабильный, производительный и многофункциональный фреймворк веб-разработки на Julia.

Управление зависимостями


Пара докладов Pkg.update() и What's new in Pkg показывает, что в настоящее время Julia имеет лучшие в своем классе функциональные возможности для управления зависимостями корпоративного уровня для ваших проектов. Список предоставляемых функций настолько велик, что здесь трудно перечислить их все.


Позвольте мне только упомянуть один конкретный инструмент в этой экосистеме — BinaryBuilder.jl, который позволит взять программное обеспечение, написанное на компилируемых языках, таких как C, C++, Fortran, Go или Rust, и построить предварительно скомпилированные артефакты, которые могут быть легко использованы из пакетов Julia (что означает, что не нужна никакая компиляция на стороне клиента, когда вы устанавливаете пакеты, имеющие такие зависимости).


Интеграция с внешними библиотеками


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



Здесь стоит добавить, что Джулия уже много лет отлично интегрируется с Python, см. JuliaPy.


Хорошим всеобъемляющим примером выполнения некоторой реальной работы в Julia, требующей интеграции, является создание многоканальной беспроводной настройки динамиков, где показано, как легко сшивать всякие штуки вместе (и, в частности, с помощью ZMQ.jl, Opus.jl, PortAudio.jl, и DSP.jl).


Еще один интересный доклад, демонстрирующий возможности интеграции, — это JSServe: Websites & Dashboards в Julia, который показывает высокопроизводительный фреймворк для легкого объединения интерактивных графиков, markdown, виджетов и простого HTML/Javascript в Jupyter / Atom / Nextjournal и на веб-сайтах.


Инструментарий разработчика


В паре замечательных докладов Juno 1.0 и Using VS Code рассказывается, что текущая поддержка IDE для Джулии в VS Code первоклассна. У вас есть все для полного счастья: анализ кода (статический и динамический), отладчик, рабочие области, интеграция с ноутбуками Jupyter и удаленные возможности.


Управление рабочими процессами в машинном обучении


Я не хочу охватывать множество различных алгоритмов ML, доступных в Julia изначально, так как их просто слишком много (и если чего-то не хватает, вы можете легко интегрировать его — см. раздел возможности интеграции выше).


Однако в дополнение к конкретным моделям вам нужны фреймворки, позволяющие управлять рабочими процессами ML. В этой области есть две интересные презентации: MLJ: A machine learning toolbox for Julia, и AutoMLPipeline: A ToolBox for Building ML Pipelines. По моему опыту, такие инструменты имеют решающее значение, когда вы хотите перейти с вашими ML-моделями из песочницы дата-саянтиста в реальное производственное использование.


Выводы


Очевидно, я опустил много интересных вещей, которые были показаны во время JuliaCon 2020. Однако я надеюсь, что те аспекты, которые я здесь затронул, то есть:


  • модели корпоративного уровня для создания микросервисов, приложений и
    надежные инструменты управления зависимостями,
  • очень гибкие и мощные возможности для интеграции Julia с существующими кодовыми базами, которые не были написаны на Julia,
  • отличный инструмент разработчика в VSCode,
  • зрелые пакеты, которые помогут вам создать производственный код для развертывания ML-решений,

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


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


Готова Ли Джулия для прода? Вопросы и ответы с Богумилом Каминским


Статья профессора Каминского вызвала немного ажиотажа на Hacker News. Некоторые комментаторы высказывали сомнения в том, что Джулия может считаться готовой к производству из-за, в частности, документации, пакетов, инструментов и поддержки.


InfoQ решило поговорить с профессором Камински, чтобы лучше понять его позицию.


InfoQ: Не могли бы вы описать ваш бэкграунд и вашу связь с Julia?


Bogumił Kamiński: Я профессор Варшавской школы экономики SGH, Польша, работаю в области операционных исследований и имитационного моделирования.
Я нахожусь в топ-5% участников языка Julia по количеству коммитов, внес значительный вклад в экосистему данных Julia и, в частности, один из основных мейнтейнеров DataFrames.jl.
Я занимаю второе место по ответу на тег [julia] в StackOverflow. Прежде чем перейти на полный рабочий день в академию, я более 10 лет руководил командой из нескольких сотен разработчиков и аналитиков, развертывающих проекты BI/DWH/data science для крупнейших польских корпораций и учреждений.


InfoQ: Основная аргументация в вашей статье, по-видимому, заключается в том, что экосистема Julia теперь достигла уровня зрелости, который делает ее готовой к производству. Не могли бы вы подробнее остановиться на этом моменте? Что препятствовало внедрению Джулии в производство и каковы наиболее значительные достижения, которые устранили эти блокирующие моменты?


Kamiński: Здесь очень важно определить, что я понимаю под готовностью Джулии к проду.


Я бы определил это так: наличие у языка основных пакетов достигает такого уровня стабильности, что вещи не меняются кардинальным образом "каждые шесть месяцев". Это означает, что когда вы начинаете проект, вы можете смело ожидать, что в долгосрочной перспективе (несколько лет) все должно просто работать.


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


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


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


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


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


Почему это так важно? Ну, вы можете легко "отправить" проект Julia и ожидать, что любой человек в любой среде должен быть в состоянии относительно легко запустить его. Конечно, будут угловатые моменты; но мой опыт ежедневного использования Linux и Windows 10 заключается в том, что все должно просто работать на обеих платформах.


Если вы делаете проект в Julia, вы можете ожидать, что либо есть пакет, который делает то, что вы хотите, либо вы можете легко использовать код, написанный на C или Python, и заставить его работать. В своем посте я хотел подчеркнуть, что мы находимся именно в этом состоянии. В качестве примера, основанного на чем-то, над чем я работал на этой неделе, у Джулии есть отличный пакет LightGraphs.jl для работы с графиками, но мои сотрудники используют Python и предпочитают использовать igraph. Вот пример кода с использованием графика (взято из учебника для графика в Python):


import igraph as ig
g = ig.Graph()
g.add_vertices(3)
g.add_edges([(0,1), (1,2)])
g.add_edges([(2, 0)])
g.add_vertices(3)
g.add_edges([(2, 3), (3, 4), (4, 5), (5, 3)])
g.pagerank()

Теперь вы спросите, как бы выглядел эквивалент в Julia. А вот так:


using PyCall
ig = pyimport("igraph")
g = ig.Graph()
g.add_vertices(3)
g.add_edges([(0,1), (1,2)])
g.add_edges([(2, 0)])
g.add_vertices(3)
g.add_edges([(2, 3), (3, 4), (4, 5), (5, 3)])
g.pagerank()

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


Что это означает на практике? Если вы делаете проект, вы не застреваете с мыслью: "могу ли я использовать Джулию, так как через три месяца, возможно, мне понадобится что-то в проекте, чего еще нет в Джулии"? Но скорее вы знаете: "я могу относительно безопасно использовать Julia, так как в настоящее время многие пакеты общего назначения уже существуют, и даже если чего-то не хватает, я могу просто использовать это с другого языка, и это будет относительно безболезненно, независимо от того, является ли это C/Python/R/...".


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


Теперь позвольте мне уточнить, что я не вижу в определении термина "готовый к производству". Я не рассматриваю Джулию как язык, который лучше всего подходит для любого вида проекта. Каждый язык программирования имеет свою нишу, и ниша Julia — это высокопроизводительные вычисления / наука о данных (или как вы это там называете). Если вам нужны компактные бинарные файлы — наверняка Julia не является лучшим вариантом. Если вы хотите разрабатывать приложения для Android — тут тоже посоветую смотреть в другом направлении.


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


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


Kamiński: Процитирую то, что я написал в начале своего поста:


"Я потратил 20 лет на развертывание проектов, связанных с наукой о данных, в корпоративных средах (тогда это не называлось наукой о данных, но мы уже обучали нейронные сети делать прогнозы), и у меня есть много коллег, которые глубоко занимаются разработкой корпоративного программного обеспечения."


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


Если вы посмотрите на опрос разработчиков Julia, слайд 28, то станет ясно, что люди используют Julia для вычислений — и это те области, где, по моему мнению, Джулия готова к производству.


Теперь, что касается таких вещей, как документация, пакеты, инструменты и поддержка — конечно, это должно и может быть улучшено. И я согласен, что более зрелые экосистемы, такие как R/Python/Java, в среднем имеют здесь лучший охват. Например, как соразработчик DataFrames.jl, я могу сказать вам, что большинство последних PR связаны с документацией. Но я бы не стал недооценивать сообщество Джулии здесь. В общем, если у вас есть какой-либо вопрос и вы разместите его на SO, Julia Discourse или Julia Slack, вы можете получить ответ обычно в течение нескольких минут, самое большее часов. Вот типичная история такого рода: люди обычно очень отзывчивы, и ошибки исправляются довольно быстро.


Если бы меня попросили назвать главный сомнительный момент касательно Джулии, то это было бы наличие достаточного количества людей, квалифицированных в этом языке в общем сообществе разработчиков. Я могу понять владельцев продуктов / менеджеров проектов и их чувство риска того, что они не смогут найти достаточно людей для работы над своими проектами, как только они возьмут на себя смелость начать работать на Julia. Однако здесь я убежден, что ситуация быстро улучшается. В прошедшем JuliaCon 2020 приняли участие более 20 000 участников. Кроме того, есть много ресурсов, уже доступных бесплатно в интернете.


InfoQ: Помимо вопроса о том, готова ли Джулия к проду или нет, или для каких областей она предназначена, каковы, на ваш взгляд, основные сильные стороны языка? Рассматриваете ли вы его как замену Python, R или любому другому языку, по крайней мере в области научных вычислений и науки о данных?


Kamiński: Я думаю, что здесь снова лучше всего процитировать последний опрос разработчиков Julia, слайды с 8 по 11. Я бы сосредоточился на трех главных вещах из слайда 8:


  • Скорость — здесь ситуация относительно проста. Возьмите любой зрелый пакет, такой как TensorFlow или PyTorch, который требует производительности; они написаны в основном на C++. А Python — это всего лишь тонкая оболочка вокруг ядра C++. Теперь возьмем Flux.jl или Knet.jl. Они по существу реализованы в чистом виде. Итак, суть такова: если вам нужно, чтобы ваш код работал быстро, в то же время используя преимущества языка высокого уровня, то Julia — это естественный выбор. Кроме того, как объяснялось выше, если есть внешняя библиотека, которая очень быстра, и вы хотите использовать ее, обычно это относительно легко сделать.


  • Простота использования — есть множество проявлений этого аспекта, но мой опыт показывает, что когда кто-то получает представление о принципах Джулии, он очень хорошо сравнивается с точки зрения синтаксиса и дизайна, например, с R/Python при выполнении вычислений. Язык был разработан вокруг поддержки этих видов задач в лучшем виде. И это не только синтаксис — это также выбор того, когда вещи будут происходить явно, а когда — нет (например, с трансляцией). Исходя из моего опыта, это делает код Джулии простым в обслуживании, а хорошо написанный код в значительной степени самодокументируется.


  • Код является открытым и может быть изменен — этот аспект имеет два измерения. Прежде всего, большинство пакетов Julia лицензированы MIT, что часто очень приветствуется в корпоративных средах. Во-вторых — поскольку большинство пакетов написано на Julia, то если вам не нравится, как что-то работает — вы просто модифицируете это сами (что гораздо проще, чем в R/Python, где, скорее всего, то, что вам нужно изменить, написано, например, на C, C++, Fortran).



Люди часто спрашивают меня, вижу ли я Джулию в качестве замены R / Python. И я думаю об этом так:


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


  • Если у вас есть новая задача, не требующая критической производительности — просто используйте язык, который вы знаете лучше всего (и если для вас часто актуален пункт 1 как для меня — вы можете смело выбрать для этого Julia).


  • Если у вас много устаревшего кода R/Python и вы им довольны — просто придерживайтесь его и помните, что если у вас есть некоторые критически важные для производительности части, они могут быть относительно легко переписаны на Julia и интегрированы обратно с вашей исходной кодовой базой (я сделал много таких проектов).



InfoQ: Как вы видите эволюцию Джулии?


Kamiński: Во-первых, я бы сказал, что согласен с тем, что подразумевается в вашем вопросе: это будет "эволюция", а не "революция". Конструкция Джулии оказалась надежной, и я не думаю, что она изменится радикально; скорее, во многих областях будут наблюдаться постепенные улучшения.


Если бы я назвал здесь некоторые основные изменения, то это были бы:


  • Улучшение поддержки многопоточности. Я думаю, что это действительно актуально для основных случаев использования Julia. Так-то поддержка есть, но все же здесь многое можно улучшить. Точно так же следует ожидать улучшения в обработке GPU/TPU.


  • Улучшение задержки компилятора. Опять же, с каждым релизом он становится намного лучше, но это как раз то, на улучшение чего все уповают.


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


  • Рост сообщества — я считаю, что число людей, заинтересованных в Джулии, значительно увеличивается, о чем свидетельствует, например, количество участников JuliaCon2020. Это означает, что: а) в будущем будет легче нанимать качественных разработчиков Julia, если они понадобятся, и б) это создаст положительную обратную связь для качества экосистемы Julia, поскольку все больше людей сообщают о проблемах и участвуют в них. Опять же, как сопровождающий DataFrames.jl я наблюдаю этот сдвиг: люди, которые никогда не были в "ядре" разработки пакета, открывают вопросы / делают PR и обсуждают функциональные возможности в социальных сетях.



Если вы заинтересовались языком Julia, все доклады с JuliaCon 2020 доступны на YouTube.

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 14

    0
    Для прода желателен LTS-релиз, в случае Джулии это 1.0, который вышел в августе 2018, c тех пор было много изменений, в 2020 логичнее подождать следующего LTS.
      +3
      Решил я тут потыкать в Julia на предмет МКЭ. Есть пакет JuliaFEM, который должен мне помочь. Я установил последнюю Юлю (1.5.1), добавил этот пакет, написал using JuliaFEM и получил вот это:
      ERROR
      ERROR: LoadError: LoadError: Evaluation into the closed module `Calculus` breaks incremental compilation because the side effects will not be permanent. This is likely due to some other module mutating `Calculus` with `eval` during precompilation - don't do this.
      Stacktrace:
      [1] eval at .\boot.jl:331 [inlined]
      [2] simplify(::Expr) at D:\OPData\Julia\packages\Calculus\mbqhh\src\symbolic.jl:96
      [3] calculate_interpolation_polynomials(::Expr, ::Array{Float64,2}) at D:\OPData\Julia\packages\FEMBasis\hrK6J\src\create_basis.jl:25
      [4] create_basis(::Symbol, ::String, ::Tuple{Tuple{Float64},Tuple{Float64}}, ::Expr) at D:\OPData\Julia\packages\FEMBasis\hrK6J\src\create_basis.jl:48
      [5] top-level scope at D:\OPData\Julia\packages\FEMBasis\hrK6J\src\lagrange_segments.jl:4
      [6] include(::Function, ::Module, ::String) at .\Base.jl:380
      [7] include at .\Base.jl:368 [inlined]
      [8] include(::String) at D:\OPData\Julia\packages\FEMBasis\hrK6J\src\FEMBasis.jl:4
      [9] top-level scope at D:\OPData\Julia\packages\FEMBasis\hrK6J\src\FEMBasis.jl:16
      [10] include(::Function, ::Module, ::String) at .\Base.jl:380
      [11] include(::Module, ::String) at .\Base.jl:368
      [12] top-level scope at none:2
      [13] eval at .\boot.jl:331 [inlined]
      [14] eval(::Expr) at .\client.jl:467
      [15] top-level scope at .\none:3
      in expression starting at D:\OPData\Julia\packages\FEMBasis\hrK6J\src\lagrange_segments.jl:4
      in expression starting at D:\OPData\Julia\packages\FEMBasis\hrK6J\src\FEMBasis.jl:16
      ERROR: LoadError: Failed to precompile FEMBasis [353fb843-c566-51e6-ba49-78b3e3d5ebb5] to D:\OPData\Julia\compiled\v1.5\FEMBasis\x3cNT_zqV69.ji.
      Stacktrace:
      [1] error(::String) at .\error.jl:33
      [2] compilecache(::Base.PkgId, ::String) at .\loading.jl:1305
      [3] _require(::Base.PkgId) at .\loading.jl:1030
      [4] require(::Base.PkgId) at .\loading.jl:928
      [5] require(::Module, ::Symbol) at .\loading.jl:923
      [6] include(::Function, ::Module, ::String) at .\Base.jl:380
      [7] include(::Module, ::String) at .\Base.jl:368
      [8] top-level scope at none:2
      [9] eval at .\boot.jl:331 [inlined]
      [10] eval(::Expr) at .\client.jl:467
      [11] top-level scope at .\none:3
      in expression starting at D:\OPData\Julia\packages\FEMBase\qGDOl\src\FEMBase.jl:19
      ERROR: LoadError: Failed to precompile FEMBase [fbcbbc08-f1bf-5204-9233-b69f5d396135] to D:\OPData\Julia\compiled\v1.5\FEMBase\6HUoq_zqV69.ji.
      Stacktrace:
      [1] error(::String) at .\error.jl:33
      [2] compilecache(::Base.PkgId, ::String) at .\loading.jl:1305
      [3] _require(::Base.PkgId) at .\loading.jl:1030
      [4] require(::Base.PkgId) at .\loading.jl:928
      [5] require(::Module, ::Symbol) at .\loading.jl:923
      [6] include(::Function, ::Module, ::String) at .\Base.jl:380
      [7] include(::Module, ::String) at .\Base.jl:368
      [8] top-level scope at none:2
      [9] eval at .\boot.jl:331 [inlined]
      [10] eval(::Expr) at .\client.jl:467
      [11] top-level scope at .\none:3
      in expression starting at D:\OPData\Julia\packages\JuliaFEM\DbhTT\src\JuliaFEM.jl:111
      ERROR: Failed to precompile JuliaFEM [f80590ac-b429-510a-8a99-e7c46989f22d] to D:\OPData\Julia\compiled\v1.5\JuliaFEM\JKouA_zqV69.ji.
      Stacktrace:
      [1] error(::String) at .\error.jl:33
      [2] compilecache(::Base.PkgId, ::String) at .\loading.jl:1305
      [3] _require(::Base.PkgId) at .\loading.jl:1030
      [4] require(::Base.PkgId) at .\loading.jl:928
      [5] require(::Module, ::Symbol) at .\loading.jl:923

      Но у пакета же есть репозиторий на гитхабе, сейчас я напишу issue разработчикам. Но issue там уже был, от 7 марта (а ещё несколько более поздних), и среди комментариев предлагалось даунгрейдить Юлю.
      Но есть ещё пакет JuSFEM! Правда, он не ставится способом, указанным в репозитории, документации и примеров к нему нет, а тесты выглядят вот так:
      Тест, который проходит всегда
      using JuSFEM
      using Test
      
      @testset "JuSFEM.jl" begin
          # Write your own tests here.
      end

      И ещё есть пакет JuAFEM, который просто не собирается.
      В общем, если сам язык и довели до более-менее приличного состояния, то с экосистемой ещё всё печально.
        0

        Gridap.jl не пробовали? Вроде как тоже из этого жанра — все никак не доберусь его посмотреть

          +2
          Спасибо, этот пакет я как-то пропустил. Вроде как с первого взгляда он с конечными элементами нормально работает, буду на него смотреть, как в очередной раз фортран задолбает.
            +2
            Кстати, я недавно глянул на современный фортран. Я то думал, что это какой-то древний артефакт. Но оказалось это современный, активно развивающийся, предельно ясный язык, быстрый и параллельный.

            Я вот подумываю, когда тормоза Питона меня окончательно достанут, писать модули на фортране.
        +2
        Те, кто работает плотно с Julia, подскажите, ее уже можно использовать в небольших standalone скриптах?

        Я год назад пробовал написать небольшой standalone скрипт, который запускается по таймеру, собирает из API json'ы, делает расчет, пишет в файл и завершает работу.

        К моему удивлению этот скрипт работал каждый раз секунд около 20, тогда как «медленный» python работал какие-то миллисекунды. Я написал в форумы, мне посоветовали запускать мой код из REPL, который все время висит в памяти. Я тогда немного удивился и забил на julia.

        Подскажите, сейчас это починили?
          0

          Тут как раз выше было про скриптинг. Если же хочется делать исполняемые файлы для пуска без интерпретатора, то вот материал — собственно, эта плюшка по мне самая ожидаемая. Больше всего печалит, что по-большей части все держится на энтузиастах одиночках, которые тоже вполне могут забить или схалтурить (как в случае с проблемой из первого комментария — то ли ждать, пока калькулус починят свой пакет, то ли когда juliaFEM обзаведется своим солвером). Все силы бросаются на датасаянсы, а нормальный пакет с вейвлетами никак не выпустят, приходится самому делать

            +1
            Огромное спасибо, погляжу! Я уже давно пытаюсь свалить с Питона куда-нибудь. Я научился писать быстрые программы на Python, с использованием cython, numpy, numba, jax, с-модули, etc… Но, честно говоря, хочется уже не зоопарка, а единой кодовой базы.

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

            Еще немного смущает порой агрессивный маркетинг и смущает попытка ранней коммерциализации Julia, т.е. Julia Computing предлагает Enterprise вариант для тех, кому нужна хорошая поддержка. Я бы наоборот, больший упор делал на честную работу с community. С горя я уже к фортрану начал присматриваться.

            Очень надеюсь, что Julia постепенно наберет базу пользователей, развитое коммьюнити и стабилизирует все пакеты. Идея языка и сам подход мне очень нравятся!
              0

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

                +1
                Фортран просто великолепен, если начинать писать на нём сейчас (стандарт 2008 года и более поздние). Отличная производительность, ясный с первого взгляда код, параллельность трёх видов из коробки и много других плюшек. Я, например, не встречал ни одного другого языка, на котором можно было бы указать компилятору на максимальное, минимальное и среднее число итераций в цикле.
                Но вот если по наследству досталась программа, написанная в 80-х годах, то хоть вешайся.
                +1
                NIM и Swift посмотрите ещё…
            +1

            Вкладка-завершение? Что это такое?

              0

              Поправил — ошибка перевода Command-line completion (also tab completion)

              +1
              Есть в стадии разработки библиотека juliacaller для интеграции с Java. Разрабатывается автором зрелой библиотеки rcaller, которая активно используется (и дорабатывалась мной лично)

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

              Самое читаемое