среда, 2 января 2019 г.

Лунная Sonata

Год назад я описал свой проект по созданию программы для математических расчётов в 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

Комментариев нет:

Отправить комментарий