Год назад я описал свой проект по созданию программы для математических расчётов в Lua. За прошедшее время многое успело измениться. Во-первых, название проекта стало, на мой взгляд, более приятным. Во-вторых, сформировалась концепция: компактный и портативный инструмент для расчётов "на скорую руку". В третьих, проведён рефакторинг по принципу "долой всё лишнее". И, естественно, были добавлены новые возможности! О них и пойдёт речь далее.
Как видно из приведённого рисунка, для лучшей читаемости текст теперь окрашивается разными цветами. К сожалению, данная возможность работает не везде, и по-умолчанию отключена (управляется флагом LC_USE_COLOR).
Что касается вызова программы, он возможен в двух вариантах:
lua sonata.lua
- использует программный интерпретатор команд, позволяет писать лог и хранить результат последнего вычисления, но делает недоступной историю команд (стрелка "вверх"), кроме того, возможны ошибки;
lua -i sonata.lua
- использует быстрый и надёжный встроенный интерпретатор Lua, но без логирования, к тому же, в версии 5.1 не забывайте про знак равенства для вывода результата вычисления.
Кстати, хотя Sonata LC ориентирована на Lua 5.3, большинство функций переписаны таким образом, чтобы обеспечить совместимость с версией 5.1.
Для того, чтобы сделать взаимодействие с программой более интерактивным, предусмотрен специальный тип файлов - note. По сути, это обычный список команд, которые пользователь вводит при работе в интерактивном режиме. При этом однострочные комментарии отображаются как текст, выражения отображаются и вычисляются, а отличный от nil результат выводится на печать. Если в тексте встречается вызов паузы, вычисление приостанавливается, а у пользователя появляется возможность ввести какую-либо команду. Данный механизм используется для обзора возможностей программы с помощью файла intro.note.
Любая программа требует документации, которую необходимо поддерживать и обновлять. Для решения данной проблемы Sonata LC использует автогенерацию, в результате которой формируется файл help.html. Для того, чтобы сгенерировать справку на русском языке, в файле sonata.lua раскомментируйте переменную LC_LOCALIZATION и запишите в неё файл локализации
LC_LOCALIZATION = "ru.lng"
после чего выполните обновление html-файла командой
lua sonata.lua -D
Что касается новых модулей, их не так много. Во-первых, добавилась возможность работать с графами и, скажем, искать кратчайший путь между двумя вершинами. Модуль special предоставляет досуп к специальным математическим функциям, так что если вам давно хотелось посчитать распределение интенсивности в сечении лазерного пучка, теперь это стало возможным! Операции над множествами переехали в модуль со структурами данных, где также имеются "стек", "очередь" и "куча". Небольшая подборка физических констант находится в модуле const, причём попытка их изменения вызывает ошибку. Данный модуль также позволяет создать собственную "неизменяемую" величину.
На этом я закончу свой краткий обзор Sonata LC. Если он вас заинтересовал, вот несколько ссылок:
Текущая версия программы: sonata.zip
Страница проекта на github.com
Документация (англ): wiki
Комментариев нет:
Отправить комментарий