Задумался над вопросом создания "альтернативной" IDE для дракона. На первый взгляд использование в качестве основы одной из RCP (н-р, netbeans или eclipse) должно позволить реализовать IDE достаточно быстро.
Неспеша размышляю над различными аспектами будущей системы
Вопрос номер один - формат хранения схем.
Самое простое решение использовать бинарный формат (вплоть до сериализации схемы
), но оно мне не нравится, т.к.:
1) Схемы могут храниться в cvs. Было бы очень хорошо если бы стандартные diff/merge-инструменты выдавали осмысленную информацию. С бинарным форматом достичь такого не получится.
2) Хочется иметь возможность редактировать текстовое представление схемы "вручную", без использования IDE. Можно представить достаточно много ситуаций, когда "рефакторинг" схемы проще/быстрее осуществить над текстом, чем в "визуальном" режиме.
3) Спецификация бинарного формата обычно сложнее, чем текстового. Это осложняет реализацию и поиск "багов".
Есть какие-нибудь идеи на этот счёт? Может быть текстовое представление и не нужно?
Думал об xml-ном описание. С одной стороны упрощается разбор, с другой - страдает читаемость и модифицируемость "руками"...
-----
Забыл упомянуть один момент.
Текстовое представление может служить для представления:
а) программы на "псевдо" языке, где есть только управляющие конструкции.
Н-р:
Код:
(СИЛУЭТ
(ЗАГОЛОВОК "Силуэт")
(ВЕТКА "Поиск автобуса"
(КОММЕНТАРИЙ "Найди остановку автобуса и займи очередь")
(АДРЕС "Ожидание посадки"))
(ВЕТКА "Ожидание посадки"
(ВОПРОС "Автобус подошёл?"
(ЕСЛИ_ДА (МЕТКА :M1)
(ВОПРОС "Твоя очередь подошла?"
(ЕСЛИ_ДА (ВОПРОС "Есть место?"
(ЕСЛИ_ДА (АДРЕС "Посадка в автобус"))
(ЕСЛИ_НЕТ )))
(ЕСЛИ_НЕТ (ПРОДОЛЖИТЬ :M1))))
(ЕСЛИ_НЕТ ))
(АДРЕС "Ожидание посадки"))
(ВЕТКА "Посадка в автобус"
(КОНЕЦ)))
б) описания графа (вариация на тему входного файла для graphviz'a).
(б) - проще реализовать, но вряд ли такое предсталение будет пригодно для ручной правки и diff/merge...