В поисках лучшей среды для Julia: Juno или Jupyter?

Julia

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

Когда встает вопрос об IDE для обработки данных в Julia, традиционно рассматриваются 2 основных варианта: 

IJulia и Juno.

IJulia

IJulia — это ядро Jupyter для Julia, которое можно добавить с помощью Pkg: 

Pkg.add("IJulia")

Достоинства 

Используя IJulia с Jupyter Notebook, вы получаете множество великолепных преимуществ по сравнению с Juno. Во-первых, это фантастическое выполнение на уровне ячеек. С их помощью вы можете определять, какой код запускать и когда, и даже не допускать выполнения определенных ячеек для достижения определенного результата. Более того, вывод данных в Jupyter довольно удобен, и с ним легко оперировать.

Во-вторых, это возможность применять “магические” команды IJulia. Несмотря на то, что технически они не являются “магическими”, а представляют собой функции Julia, экспортированные из IJulia, эти полезные команды при необходимости лучше всегда иметь под рукой. Кроме того, использовать макросы для выполнения команд Bash куда лучше, чем застрять в REPL и вынужденно открывать второе окно терминала, что вам пришлось бы сделать в Juno.

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

воспроизводимости. 

Блокноты — превосходный инструмент для обучения и передачи информации. А возможность добавлять ячейки Markdown для больших фрагментов текста с пояснениями делает преимущество их использования еще более очевидным. Именно по этой причине я обычно прибегаю к помощи блокнотов для демонстрации идей и кода в своих статьях на Medium, хотя я все-таки предпочитаю использовать Juno. 

Недостатки 

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

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

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

Juno

Juno является интегрированной средой разработки для Julia, которую можно добавить как расширение для текстового редактора Atom. Для этого нужно перейти в edit>Preferences в панели меню, затем выбрать расширения и найти “ Juno”. 

Достоинства 

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

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

Рассмотрим еще одно замечательное достоинство Juno: данная среда позволяет легко начать новый сеанс. В недостатках использования IJulia я уже рассказывал о том, как утомляет и раздражает необходимость постоянно перезапускать ядро. Здесь же вы можете очень быстро перезапустить сеанс в Julia с помощью Interrupt Exception, нажав ctrl+D.

В Juno вы можете использовать панель “Documentation Browser”, предоставляющую привлекательный UI для поиска документации Julia по всем добавленным пакетам. 

Juno может похвастаться еще одной превосходной возможностью: автоматическим форматированием. В любой момент вы можете выделить и отформатировать код, кликнув на Juno>Format Code. Также вы можете выполнять отдельные блоки кода, тем самым значительно упрощая использование текстовых буферов с кодом Julia внутри. 

Помимо всего вышесказанного, у вас есть возможность запускать удаленные процессы Julia из Juno. 

Недостатки 

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

Прежде всего, вводить функции в REPL гораздо менее удобно, чем в текстовый буфер. Конечно, вы можете сделать это и в Julia REPL, но, в отличие от ввода функций в ячейку Jupyter, данный процесс займет больше времени. Более того, вы утратите возможность копипастить. Но эту проблему можно сгладить, поместив ваши функции в файл .jl внутри текстового буфера Atom, но после этого вам придется выполнять include() или перезапускать файл при каждом добавлении или изменении функции.

Заключение 

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

Очевидно, что Jupyter также пришелся весьма кстати для моих информационных статей. Без него было бы намного сложнее сначала иллюстрировать, а потом размещать свою работу, используя файлы .jl и сеансы REPL. Вероятно, самым большим недостатком у Jupyter являются “умирающие” ядра, а у Juno  — воспроизводимость. В целом, во многих отношениях использование того или иного инструмента будет зависеть от ваших целей. 

Читайте также:


Перевод статьи Emmett Boudreau: Juno Vs. Jupyter — Which Is The Better Development Environment For Julia?