Макс, я не собираюсь нападать на Диану и mmt :-) Мне просто интересно, пытались ли делать чисто С++-решение и с какими трудностями при этом сталкивались.
Навскидку - я не знаю, как средствами чистого Си++ реализовать доступ к полям сообщения - с учётом того, что по синтаксису mm языка там используется операция ".", имена полей - свои для каждого типа сообщений, и одна и та же msg переменная может хранить сообщения любого типа.
По-моему, в ММ и так есть базовый для всех тип MESSAGE, на которым строится иерархия типов сообщений. При этом для того, чтобы изменился "распознаваемый" тип переменной, используется конструкция assume -- вместо неё с успехом может быть тот или иной cast (ну или assume может разворачиваться в cast макросом).
Кроме того - определённые трудности могут быть с операторами select/accept.
Их можно сделать как switch c предварительным вызовом функции монитора, возвращающей нужный буфер. Ну или как-то так.
А отвечая на всё - напоминаю два фактора:
- прошлые версии mmt были фактически препроцессором (без построения
синтаксического дерева и т.п.). Это приводило к многочисленных техническим проблемам - конкретику я уже не помню, может Макс или Толя вспомнят - которые и были решены переходом к текущей схеме.
Вот-вот, очень интересно было бы. потому что я предполагаю, что проблемы должны быть. Но пока то, что писал Макс относится скорее к идеологии.
- разговор о том, нужен язык или Си++-библиотека, идёт уже лет так десять.
Вывод, который сделал я, примерно такой - mm-язык любят "теоретики" (см. аргументы Макса в его письмах в этот thread), либо "менеджеры" (язык Дианы
- trademark или как там это называется). А не любят те, кому приходится на
нём реально программировать проекты.
- добавляется полезная информация, например, о номерах строк и номерах операторов в тексте;Куда? В качестве отладочной информации в объектный файл? Как-то там отладчик для ММ поживает? :-)
В Диане было такое средство - переход от события к строке текста модели. Это было реализовано путём составления таблицы операторов; в трассу записывался номер оператора, а mmt в т.ч. создавал таблицу операторов, в которой хранилось в т.ч. положение этого оператора в исходном тексте модели.
Да, это интересная проблема.
Костя.