Бесплатные инструменты для Wolfram Language
В этой статье будет обзор бесплатных утилит и инструментов, которые позволяют работать с языком Wolfram. Здесь мы рассмотрим то как установить и использовать среду исполнения, какие существуют расширения для различных редакторов кода и возможности бесплатных инструментов для работы с кодом в интерактивном режиме.
6К открытий6К показов
Многим известен такой инструмент, как Wolfram Mathematica. Распространяется он совсем не бесплатно. Лицензия для личного использования стоит около $440 (~34 500 руб. в день написания статьи). Для коммерческого использования и для учебных заведений цена ещё выше.
Но это не самая большая проблема. Если рассматривать Wolfram Mathematica как инструмент для учёного, то всё нормально — пользователи просто приобретают ПО для своих личных целей. Когда дело доходит до применения Wolfram как языка программирования, становится намного сложнее.
Допустим я написал код и хочу его распространить. Никто не мешает мне выложить исходники на GitHub, однако тот, кто заинтересуется моим проектом должен будет иметь лицензию чтобы просто его запустить. В итоге распространение свободного ПО на Wolfram остаётся в рамках относительно узкого сообщества пользователей с очень отличающимися интересами.
Я не считаю, что эта статья должна стать какой-то прорывной и заставить людей массово переходить на Wolfram, однако, очень надеюсь, что среди читателей всё же найдутся интересующиеся.
Wolfram Engine
Wolfram Engine — бесплатная реализация языка Wolfram, которая содержит в себе полную стандартную библиотеку языка — ка Mathematica, но без пользовательского интерфейса. То есть это само ядро Wolfram, взаимодействие с которым осуществляется через интерфейс командной строки.
На мой взгляд отсутствие UI — это очень маленькая плата за то, что у пользователей появится законная и бесплатная версия языка. Конечно же, те кто привык к Mathematica, не смогут быстро перестроится к другому рабочему процессу, но при наличии терпения работа с Wolfram Engine может стать более эффективной, чем с Mathematica.
Теперь рассмотрим процесс установки Wolfram Engine:
- Переходим на страницу загрузки.
- Выбираем подходящую версию и скачиваем.
- После скачивания необходимо получить лицензию — для этого нужно зарегистрироваться или авторизоваться в учетной запись account.wolfram.com.
- Запускаем установщик и следуем инструкции.
- После установки в консоли и выполняем команду
wolframscript
. - При первом запуске ядра необходимо ввести учетные данные из шага 3.
После выполнения действий выше Woflram Engine готов к использованию — вместе с ним устанавливаются ещё две утилиты: Wolfram Script и Wolfram Player. Первая — утилита командной строки, которая по сути является расширением стандартного интерфейса командной строки ядра.
Вторая — программа для просмотра блокнотов Mathematica и вычисляемых документов. Редактировать и выполнять код с её помощью нельзя, но если блокнот был подготовлен должным образом, в нём будут работать все заранее выгруженные интерактивные объекты. Получается таким образом Wolfram Player можно использовать для запуска подготовленных программ.
Hello World
Теперь напишем первую программу. Откроем консоль и запустим ядро:
После чего можно будет использовать его в режиме интерпретатора. Введём следующую команду:
Первая традиционная программа заработала — ниже должна была напечататься строка: "Hello, World!"
:
Другой способ — запустить код напрямую из командной строки (без запуска интерпретатора). Для этого достаточно в консоли выполнить следующее:
И третий способ — создать скрипт (обычно это файлы с расширениями .m, .wl, .wls), добавить туда код и выполнить его в консоли:
Wolfram Script
Как было сказано выше, это расширение интерфейса командной строки. В общем случае Wolfram Script может устанавливаться совершенно отдельно и работать с любым ядром Wolrfam. То есть на локальном компьютере может и не быть Wolfram Engine или Mathematica, но при помощи Wolfram Script можно подключиться к удаленному ядру на другом компьютере или же в облако Wolfram Cloud и запускать команды там, при этом получая вывод в консоль. Например так можно выполнить код в облаке:
Ниже мы рассмотрим еще несколько полезных опций командной строки.
Данная опция позволяет указать на то, что исполняемый код является не просто скриптом, а функцией, в которую необходимо передать аргументы.
Здесь думаю объяснения не требуются. Это способ указать что далее идет набор аргументов командной строки.
Эта опция позволяет задать типы аргументов по порядку. Список доступных типов довольно большой и сводится он в итоге ко всем заголовкам выражений Wolfram, которые язык может интерпретировать из строки или числа. Для проверки, что данный тип поддерживается можно просто посмотреть содержимое переменной
в интерактивном режиме (не все из перечисленных типов можно будет конвертировать из строки):
Три опции, показанные выше, лучше всего использовать вместе.
Вот как это будет выглядеть в командной строке:
Есть ещё одна хитрость. В функцию можно превратить целый скрипт. Необходимо просто указать это в его первой строке, тогда Wolfram Script будет воспринимать вызов скрипта именно как вызов функции с некоторыми аргументами. Это даёт возможность очень сильно упросить процесс обработки аргументов командной строки. Важно, что код скрипта должен заканчиваться точкой входа — функцией.
Создадим простой скрипт и превратим его функцию. Пусть код просто печатает числа Фибоначчи от нулевого и до указанного. Код скрипта будет выглядеть так:
Сохраним его с именем Fib.wls и вызовем этот файл из консоли:
При этом, благодаря тому, что мы указали сигнатуру функции, то по умолчанию будет происходить проверка типов аргументов:
Выше результат напечатался в виде списка в фигурных скобках. В данном случае это представление ещё достаточно удобное, однако, часто бывает так, что результат выполнения функции — это картинка, график, таблица, трёхмерный массив и вообще что угодно. Всё вышеперечисленное неудобно просматривать в консоли. Для таких случаев существует специальная опция:
Она позволяет экспортировать результат в нужное представление. Все доступные аргументы — это, по сути, список доступных форматов для функции Export. Например, ниже те же числа Фибоначчи в виде таблицы и json:
Так же стоит перечислить те форматы, которые будут использоваться чаще всего: XML, CSV, TSV, PNG, JPEG, RawJSON, RawData, String, Buinary и так далее. Кроме того результат выполнения кода и экспорта в какой-либо формат затем очень легко записать в файл просто перенаправив выход консоли.
Известные проблемы
При работе с Wolfram Script пользователи могут встретиться со многими трудностями, которые зависят от конкретной программы, которая используется в качестве терминала. У меня например при запуске скрипта в Windows Terminal + PowerShell не выводится результат — вместо этого PowerShell решает запускать саму по себе утилиту Wolfram Script в отдельном окне, где всё и происходит.
При работе в консоли MINGW64, которая устанавливается на Windows вместе с git, нельзя запустить скрипт как исполняемый файл, так как MINGW воспринимает первую строку в скрипте как путь к платформе для запуска — то есть так, как это происходит в Linux. На Windows этого пути не существует. Хотя в Windows файлы с расширением .wls по умолчанию являются исполняемыми — более того, они легко запускаются двойным щелчком или в PoserShell или CMD.
Так же в PoserShell будут трудности при передачи нескольких строк как нескольких аргументов если там содержатся кавычки или пробелы.
А в Linux нельзя использовать сокращённый вариант передачи аргументов --
, так как он воспринимается как «системный» символ, а не как опция для Wolfram Script.
Но после некоторых экспериментов с предпочтительным типом терминала можно понять оптимальный способ работы с Wolfram Script.
Wolfram Player
Его можно установить как отдельную программу или вместе с Wolfram Engine.
Как было сказано выше, это программа для просмотра интерактивных документов без возможности их редактирования. Но также в данной программе отключен пользовательский ввод данных — то есть, увы, не получится сделать документ, который будет импортировать файлы чтобы затем их обрабатывать. Основной функционал — просто открытие блокнотов (.nb) и вычисляемых документов (.cdf). Ниже скриншоты:
Чтобы посмотреть как будет выглядеть вычисляемый документ – создадим его сами при помощи Wolfram Script. Пусть это будет то же, что и выше, но с возможностью интерактивно менять начальные условия. Код скрипта будет вот такой:
Выполним его и получим файл SIR.cdf. Его можно будет открыть в Wolfram Player и график будет интерактивно меняться при изменении положения бегунков:
При выгрузке в вычисляемый документ Wolfram сохраняет в него все необходимые определения и интерактивные объекты. Поэтому выполнять код не требуется — график с манипуляторами работает сразу после открытия.
Редакторы кода
По очевидным причинам, рассмотренного ранее недостаточно, чтобы эффективно работать с языком Wolfram. Ведь весь этот код надо ещё как-то написать. Использовать Vim или блокнот не очень удобно, хотя вполне возможно, если требуется написать что-то короткое (опытные пользователи Vim со мной не согласятся и по-своему будут правы).
Поэтому далее мы рассмотрим несколько бесплатных редакторов кода, которые имеют расширения специально для Wolfram Language. Я не буду описывать подробно процесс установки редакторов, так как он во всех случаях практически одинаков, но указать какие расширения необходимо поставить стоит.
Visual Studio Code
Скачиваем установочный файл со страницы загрузки и устанавливаем по инструкции. После установки необходимо перейти в менеджер расширений и в строке поиска ввести Wolfram:
Лично я использую официальное расширение, которое разработали в Wolfram Research. Однако можно попробовать и некоторые другие — их функционал примерно одинаковый.
Теперь посмотрим как же выглядит код на Wolfram в этом редакторе:
Очень удобно то, что в VS Code и других текстовых редакторах легко запустить консоль, в которой можно проверять работоспособность кода. Выглядеть это будет вот так:
На этом мы перейдём к следующему редактору кода, но к Visual Studio Code еще вернемся ниже.
GitHub Atom
Установка данного редактора ещё проще и быстрее. Необходимо просто скачать установочный файл и запустить — редактор установится автоматически в папку пользователя и сразу же запустится.
После запуска, как и в предыдущем случае, переходим в менеджер расширений и ищем расширения по ключевому слову Mathematica (или Wolfram, но тогда строка поиска и расширение, которое я выбрал, не помещаются на одной странице). Я использую расширение от разработчика Fitzse:
Полезная функция расширения для Atom: в нём по умолчанию работает автодополнение с пометкой типа имени (функция, переменная или встроенное имя) и для системных функций, и для всех имён, используемых в текущем файле:
Sublime Text
Ещё один популярный редактор кода. В отличии от рассмотренных выше, он не был написан на Electron, поэтому в среднем, по моим ощущениям, работает чуть-чуть быстрее: быстрее открывает большие файлы, нет тормозов при вызове авто-дополнения и так далее.
Стандартная установка: необходимо просто скачать инсталлятор и следовать инструкциям. После этого перейти в менеджер расширений. Сделать это можно при помощи сочетания клавиш Ctrl + Shift + P или в основном меню Preferences > Package Control:
После чего в поле ввода необходимо написать Install Package или выбрать этот пункт:
Далее в открывшемся поле поиска необходимо ввести как обычно ключевое слово Wolfram:
После установки, как это было выше для файлов с кодом на Wolfram, станет доступна подсветка синтаксиса и автодополнение для системных имён и имён, используемых в текущем документе:
Jupyter Notebook
С помощью бесплатной среды исполнения и текстовых редакторов можно построить свой рабочий процесс в таком виде: пользователь сначала пишет скрипт или пакет, затем открывает консоль, запускает интерпретатор и уже там проверяет его работу.
Такой способ удобен, если необходимо только один раз запустить исполняемый скрипт с аргументами, чтобы он выполнял свою работу в фоне. Но работа в консоли становится не так удобна, если вам необходимо в ручном режиме проверить работу множества функций с множеством параметров и часто их комбинировать.
Блокноты Mathematica с этим справляются просто отлично — в них легко писать код и проверять результат выполнения. Есть ли альтернативы? Конечно — использовать блокноты Jupyter. Обзор Jupyter Notebook самого по себе выходит за рамки этой статьи, однако основные шаги по установке мы всё же рассмотрим.
Для начала нам потребуется сама среда Jupyter. Если вы используете Linux, то ничего объяснять не надо — подробная инструкция есть по первой ссылке под заголовком. Установка Jupyter выполняется при помощи утилиты apt.
Если вы используете Windows и не знакомы с Python и Jupyter, лучший вариант — это установить пакет Anaconda по второй ссылке. Необходимо просто следовать инструкциям. При установке очень важно отметить пункт, в котором предлагается добавить пути к исполняемым файлам в системную переменную PATH. Вместе с Anaconda установится не только Python, но и автоматически установится среда Jupyter Notebook (и многое другое). Вот так будет выглядеть окно приветствия Anaconda:
Из всего многообразия на скриншоте выше в дальнейшем нам понадобится Jupyter Notebook. В теории можно было бы использовать и JupyterLab, но он, увы, не работает с ядром Wolfram.
Следующий шаг — добавление ядра Wolfram в Jupyter. Для этого, в первую очередь, необходимо скачать проект WolframLanguageForJupyter от разработчика Wolfram Research — третья ссылка под заголовком. После того как проект будет скачан на локальный компьютер, необходимо открыть терминал в корневой папке и выполнить следующее (предполагается что Wolfram Engine и Wolfram Script установлены):
Данная команда автоматически создаст в конфигурации ядер Jupyter новое ядро для языка Wolfram. Чтобы попробовать его, снова откроем навигатор и запустим Jupyter Notebook нажатием кнопки Launch, откроется браузер по умолчанию и обзор директории пользователя:
Перейдём в любую доступную папку и нажмем кнопку «Новый» (я искренне прошу прощения у всех читателей за то, что им приходится видеть русифицированный интерфейс Jupyter). В выпадающем списке выберем ядро Wolfram Language. Далее откроется новый блокнот. Выглядеть он будет примерно так:
Готово. Теперь в ячейках можно писать код на язык Wolfram и выполнять его прямо в блокноте. Конечно же, конкретно для языка Wolfram пока что пользовательский интерфейс и возможности среды далеки от того, что есть в Mathematica (да даже далеки от того что есть в этом же Jupyter для Python).
Подсветки кода и автодополнения нет, а результаты исполнения команд могут быть только двух типов: текст и картинка. В картинку конвертируется абсолютно всё, что не является текстом. Это не очень большое разнообразие, но всё же лучше того, что мы видели в консоли. Ниже несколько примеров:
К сожалению, манипуляторы, интерактивные объекты, таблицы, графики и многое другое не будет здесь работать. Также нельзя будет изменять графики непосредственно в ячейке вывода при помощи встроенных в UI Mathematica-инструментов.
И одна из интересных фич Mathematica — возможность просто перетаскиванием превратить результат выполнения в код — тоже не доступна. Но сама по себе возможность работать с ячейками и сохранять свою работу в виде блокнота — это уже прекрасно.
nteract
Будем считать, что мы уже установили Jupyter, Wolfram Engine и они работают вместе. Тогда можно воспользоваться альтернативной средой для работы с блокнотами .ipynb — nteract.
Скачиваем по ссылке под заголовком и выполняем стандартную установку. После того как NTeract установится, просто запустим его и создадим новый пустой блокнот. Если ядро Wolfram было ранее добавлено правильно,яя то оно автоматически появится и в nteract:
Здесь будет доступно то же, что и в Jupyter Notebook:
Из плюсов nterat можно выделить то, что в нём по умолчанию больше настроек. Также очень удобно то, что данную программу можно использовать в качестве программы по умолчанию для открытия файлов с расширением .ipynb. И в моём случае более приятный пользовательский интерфейс.
Visual Studio Code + Jupyter
Вот мы и вернулись к редактору VS Code. Как я заметил выше, ни в Jupyter, ни в nteract нет подсветки кода. Однако в редакторе VS Code есть расширение, которое позволяет открывать, редактировать и выполнять код в блокнотах .ipynb. Конечно же, в этом случае, если установлено расширение для языка Wolfram, оно будет так же работать и в ячейках блокнота. Разработчик расширения — Miscrosoft, оно очень популярно и проблем с его установкой возникнуть не должно. Вот оно в менеджере расширений VS Code:
После установки расширения с его помощью можно будет открывать уже существующие блокноты и создавать новые. Чтобы создать новый блокнот, необходимо использовать сочетание клавиш Ctrl + Shift + P, открыть меню команд и выбрать создание нового блокнота (первая строка на скриншоте):
После этого откроется новый блокнот, в котором точно так же можно выполнять код на языке Wolfram. Предварительно нужно выбрать ядро:
Если таким образом использовать VS Code, то разработка на языке Wolfram становится ещё проще. Ведь в VS Code тогда можно одновременно редактировать и пакеты с исходным кодом и сразу же проверять их работу в интерактивных блокнотах:
Atom + Hydrogen + Jupyter
Примерно то же самое можно проделать и для редактора Atom. Устанавливаем расширение Hydrogen от разработчика nteract:
Когда расширение установлено, его необходимо настроить. Для этого нужно открыть настройки (кнопка settings на скриншоте выше) и добавить сопоставление языков "wolfram language": "Mathematica"
вот так:
После этого выполнение кода станет доступно непосредственно в файлах с исходным кодом на Wolfram — то есть в скриптах и пакетах. Чтобы выполнить код, нужно выделить строку целиком с кодом (или несколько) и нажать сочетание клавиш Shift + Enter. Вот как это выглядит:
Eclipse + Wolfram Workbench
До сих пор мы рассматривали либо текстовые редакторы, либо интерактивные среды. В последней части обзора речь пойдёт о среде разработки Eclipse. Она очень популярна и не нуждается в дополнительном представлении.
Для установки необходимо просто скачать подходящий архив (например Eclipse IDE for Java Developers) и распаковать его в любую доступную директорию. Затем запустить исполняемый файл eclipse.exe. Перед запуском убедитесь, что у вас установлена Java и путь к бинарным файлам добавлен в системную переменную PATH.
Следующим шагом необходимо установить расширение Wolfram Workbench. Открываем меню и выбираем пункт Help > Install New Software.
После этого откроется окно, в котором необходимо добавить нажатием кнопки Add новое хранилище, откуда можно установить расширение. В поле ввода можно ввести любое имя и адрес хранилища http://workbench.wolfram.com/update.
Далее необходимо просто следовать инструкциям по установки, и в конце расширение Wolfram Workbench будет готово к работе. Его можно добавить на основную панель инструментов Eclipse кнопкой в правом верхнем углу:
Последнее, что нужно выполнить — это указать корректные пути до исполняемых файлов. Открываем настройки и ищем пункт Wolfram. Далее указываем правильные пути в исполняемым файлам как показано на скриншоте ниже:
Всё готово для создания нового проекта. Далее просто нажимаем выбираем пункт Create a project и выбираем необходимый тип проекта:
Следуя инструкции, необходимо будет также ввести имя проекта и его расположение:
После выполненных выше действий Wolfram Workbench сгенерирует шаблонную структура файлов для типичного пакета на языке Wolfam (пакеты и работа с Wolfram Workbench — обширная тема, которая заслуживает отдельного внимания, поэтому мы не будет долго останавливаться на ней):
Вот и всё. Далее уже можно писать код. Wolfram Workbench позволяет запуска код в режиме отладки, поддерживает подсветку синтаксиса, отображает встроенную документацию, умеет запускать юнит-тесты, собирать пакетные файлы, которые затем пригодны для установки по сети или прямо из файла.
Одна из самых полезных функций — Wolfram Workbench — умеет собирать документацию для пакетов неотличимую от документации для встроенных функций. На этом мы закончим краткий обзор Wolfram Workbench.
Полезные ссылки
Официальная документация к языку Wolfram Language. Определённо одна из лучших документаций среди всех существующих.
Документация к Wolfram Workbench.
Раздел посвящённый Wolfram Mathematica на всем известном сайте вопросов и ответов.
Русскоязычная мини-версия Mathematica Stack Exchange. Открытая группа, где можно задавать любые вопросы, касающиеся языка Wolfram, и получать оперативные ответы. В том числе на вопросы стараюсь отвечать я. Если у вас возникнет какой-то — смело можете написать его на стене этой группы. Кроме вопросов-ответов на стене публикуются интересные материалы, касающиеся языка Wolfram.
Электронная книга — введение в язык от CEO компании Wolfram Research.
Ещё одна короткая методичка.
Книга одного из сотрудников компании Wolfram Research, в которой очень хорошо раскрывается сама концепция Wolrfam как языка программирования.
Wolfram Cloud
Выше я упоминал об облаке Wolfram, однако в этой статье мы не будем останавливаться на нём. Всё же здесь мне хотелось сделать обзор инструментов, которыми можно пользоваться на локальном компьютере. Обзор возможностей Wolfram Cloud — это отличная тема для отдельной статьи.
Заключение
В заключении хочу поблагодарить всех, кто дочитал до этого пункта. Я очень надеюсь что кто-то из читателей заинтересуется языком Wolfram и благодаря моему труду сможет выбрать для себя правильный инструмент для работы с ним.
В первую очередь мне хотелось показать читателям, что у интересующихся языком, кроме Mathematica, есть ещё достаточно широкий выбор средств. Если же у читателей возникнут вопросы и предложения, обязательно напишите о них в комментариях или свяжитесь со мной любым другим способом — я буду рад ответить на них.
6К открытий6К показов