Чо скажете?
Function - функции написанные юзерами
expression - выражения, как в обычных ЯП
Block - это диалоги, пишется юзерами на специальном DSL
State - состояния конкретных диалогов, и один глобальный. В стейтах хранятся переменные.
GraphicController - подгружает с помощью dlopen или чего-то подобного функции с необходимыми сигнатурами (Command)
чет я хз еще как подгружать так, чтобы можно было требовать не только предустановленные функции для отображения, но и чтобы юзеры могли писать свои функции для отображения, и использовать их в DSL, и чтобы нужно было перекомпилировать VM. Крч, как подгружать динамически функции, и хранить их в каком-то массиве для меня загадка. Можно требовать у подгружаемого файла интерфейс, в который будет передаваться имя команды и аргументы, а graphicController динамически подгруженный будет обрабатывать как-то сам.