loom

1

Описание

Языково-ориентированная система имитационного моделирования SIMODO/loom

http://simodo.ru

Языки

  • C++95,8%
  • CMake2%
  • Shell1,3%
  • HTML0,3%
  • SystemVerilog0,2%
  • Остальные0,4%
README.md

SIMODO/loom title

SIMODO/loom

SIMODO/loom
является разрабатываемой в настоящее время версией проекта языково-ориентированной системы имитационного моделирования
SIMODO
.

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

Параллельно с разработкой системы моделирования SIMODO/loom выполняется работа по её документированию. Описание некоторых частей системы готово, можно посмотреть.

УГТ4 - Технология, проверенная в лаборатории. Альфа-версия.

Краткое описание

Языково-ориентированная система моделирования (ЯСМ) — новое понятие в имитационном математическом моделировании, когда в основе системы лежит набор предметно-ориентированных языков (ПОЯ), каждый из которых отвечает за свою предметную область, которую он описывает наиболее полно и в то же время просто. ЯСМ также предполагает наличие средств автоматизации разработки ПОЯ.

Состав и возможности проекта

SIMODO/loom
:

  • Технология разработки ПОЯ.
  • Базовый императивный язык для описания алгоритмов.
  • Язык описания системы обыкновенных дифференциальных уравнений.
  • Язык логического вывода на базе системы дизъюнктов Хорна (в разработке).
  • Встроенная поддержка векторной и матричной арифметики.
  • Система позволяет выполнять длительный цикл моделирования (часы, сутки, недели...) с возможностью "на лету" не только изменять параметры модели, но и части модели.
  • Выполнение моделирования в многопоточной и распределённой среде, что включено в конструкции базового языка (в разработке).
  • Динамическая компиляция кода модели (Just-in-Time, JiT) на базе технологий LLVM (в разработке).
  • Интегрированная среда разработки
    SIMODO shell
    с набором плагинов для редактирования текстов, просмотра результатов в процессе моделирования и других функций.
  • Возможность добавления или замены компонентов открытой архитектуры: плагинов, модулей, языков и др.
  • Интеграция языков в среду разработки
    SIMODO shell
    с использованием технологии Language Server Protocol.
  • Возможность отладки сценариев и моделей на реализованных ПОЯ, как с использованием специальной утилиты, так и в интегрированной среде
    SIMODO shell
    .
  • Облачное моделирование (в разработке).
  • Репозиторий пользовательских расширений (запланировано).
  • Набор средств получения различной статистики выполнения моделирования (профилирование, покрытие тестами и др.) на базе инструмента перехвата (hooking), который уже используется для реализации JiT (запланировано).
  • Средства визуального моделирования — проектирование сцены моделирования с использованием блоков с автоматической генерацией сценария исполнения на языке
    s-script
    (запланировано).
  • Кросс-компиляция сценария исполнения модели, включая используемые модули, в совместимые со средой моделирования файлы на языке C/C++ (запланировано).

Простой пример

SIMODO shell - Three Body Problem

На снимке экрана численное решение задачи трёх тел с использованием системы моделирования

SIMODO/loom
. Модель общего вида представлена системой дифференциальных уравнений в векторной форме, записанной в отдельном файле на декларативном языке (расширение файла
.s-ode
).

Сценарий моделирования, на котором задаются начальные условия и определяются параметры отображения информации во время моделирования, записывается на императивном языке (расширение файла

.s-script
). Такой подход позволяет работать с моделью, как с типом, создавая произвольное количество объектов различных типов и добавлять эти объекты на сцену моделирования.

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

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

Ещё одним преимуществом такого подхода является возможность вычисления каждого объекта параллельно, что в некоторых ситуациях даёт возможность и распределённого моделирования.

Другие примеры моделей на основе дифференциальных уравнений можно посмотреть в каталоге

test/examples/engine/ode
. Примеры с тестированием других возможностей
SIMODO/loom
находятся в каталоге
test/source/engine
.

Статьи

Основные концепции проекта описаны в статье "Языково-ориентированное… моделирование?".

Дистрибутивы проекта

Дистрибутивы проекта формируются автоматически при слиянии в ветку

prod
и выкладываются на сайт проекта simodo.ru. Там же находится инструкция по установке.

Поддержка платформы

Windows
временно прекращена.

Сборка проекта

Рекомендации

Рекомендуется использовать версию C++ не более

C++17
.

Проект рекомендуется собирать в

Alt Linux p11
. На ранерах CI/CD спользуется образ этой версии ОС. Далее даны скрипты для этой версии ОС.

Зависимости

Перед сборкой проекта нужно установить ряд библиотек и утилит (для

Alt Linux p11
):

Если нужна сборка с интегрированной средой моделирования:

Если нужна сборка с плагинами подключения аппаратуры:

Если нужна сборка с плагином эмулятора терминала:

CMake

В файле CMakePresets.json расположены профили сборки, в которых содержатся настройки CMake.

Используйте команду

cmake --preset=<preset>
для указания профиля сборки.

Некоторые команды Cmake:

  • cmake --preset=<preset>
    -- конфигурация проекта;
  • cmake --build --preset=<preset> --target=<target>
    -- сборка цели проекта;
  • ctest --preset=<preset>
    -- запуск автотестов;
  • cmake --install <build/dir>
    -- установка проекта.

Перечисленные команды можно выполнить с помощью утилиты Make, находясь в каталоге сборки.

Скрипты в каталоге ./do/

В папке do расположены скрипты для удобства разработки.

Некоторые из них:

  • do/make
    -- сборка проекта с пресетом
    release
    ;
  • do/make <preset>
    -- сборка проекта с указанным пресетом;
  • do/make -T <target1> <target2> ...
    -- сборка целей проекта с пресетом
    release
    ;
  • do/make -T <target1> <target2> ... -P <preset>
    -- сборка целей проекта с указанным пресетом;
  • do/test
    -- запуск автотестов с пресетом
    release
    ;
  • do/test <preset>
    -- запуск автотестов с указанным пресетом;
  • do/exec
    -- запуск оболочки с выводом кода возврата после завершения работы оболочки.

Сборка проекта

После клонирования или копирования файлов для сборки проекта нужно выполнить следующие команды в каталоге проекта:

Запуск проверочных тестов:

Запуск интегрированной среды разработки:

Установка официальной версии VS Code

Для установки официальной версии VS Code я (Фетисов М.В.) использовал SNAP.

Перед установкой VS Code нужно выполнить команды:

А потом саму установку:

У меня был момент после установки, когда не грузились расширения VS Code. Возможно, дело в фильтрации некторых адресов некоторыми провайдерами Интернет. Мне удалось загрузить после запуска вузовского VPN. Но может быть не в этом было дело...