loom
Языки
- C++95,8%
- CMake2%
- Shell1,3%
- HTML0,3%
- SystemVerilog0,2%
- Остальные0,4%

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

На снимке экрана численное решение задачи трёх тел с использованием системы моделирования . Модель общего вида представлена системой дифференциальных уравнений в векторной форме, записанной в отдельном файле на декларативном языке (расширение файла ).
Сценарий моделирования, на котором задаются начальные условия и определяются параметры отображения информации во время моделирования, записывается на императивном языке (расширение файла ). Такой подход позволяет работать с моделью, как с типом, создавая произвольное количество объектов различных типов и добавлять эти объекты на сцену моделирования.
Таким образом, модель отделена от сценария моделирования, что делает описание более понятным, а работу с моделью гибкой, устойчивой к изменениям. Возможность манипулирования объектами модели позволяет формировать состав сцены не только перед началом моделирования, но и в процессе.
Также такой подход не ограничивает использование в качестве описания модели только дифференциальные уравнения, то есть для записи модели могут использоваться различные предметно-ориентированные языки.
Ещё одним преимуществом такого подхода является возможность вычисления каждого объекта параллельно, что в некоторых ситуациях даёт возможность и распределённого моделирования.
Другие примеры моделей на основе дифференциальных уравнений можно посмотреть в каталоге . Примеры с тестированием других возможностей находятся в каталоге .
Статьи
Основные концепции проекта описаны в статье "Языково-ориентированное… моделирование?".
Дистрибутивы проекта
Дистрибутивы проекта формируются автоматически при слиянии в ветку и выкладываются на сайт проекта simodo.ru. Там же находится инструкция по установке.
Поддержка платформы временно прекращена.
Сборка проекта
Рекомендации
Рекомендуется использовать версию C++ не более .
Проект рекомендуется собирать в . На ранерах CI/CD спользуется образ этой версии ОС. Далее даны скрипты для этой версии ОС.
Зависимости
Перед сборкой проекта нужно установить ряд библиотек и утилит (для ):
Если нужна сборка с интегрированной средой моделирования:
Если нужна сборка с плагинами подключения аппаратуры:
Если нужна сборка с плагином эмулятора терминала:
CMake
В файле CMakePresets.json расположены профили сборки, в которых содержатся настройки CMake.
Используйте команду для указания профиля сборки.
Некоторые команды 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. Но может быть не в этом было дело...