Изменять язык для препроцессора я не планирую. Я думаю, это это должна быть внешняя утилита, которая сначала обрабатывает файлы препроцессинга (допустим *.pre) и генерит на основе их ob7 файлы.
Кто что думает по поводу книги "Расширяемые программы" Горбунов-Посадов? Можно ли применить оттуда какие-нибудь идеи?
http://keldysh.ru/gorbunov/index.htmУ меня эта книжка на полке. Два раза читал, до применения руки не дошли, к сожалению.
Для тех, кто не в теме, попробую вкратце пояснить, в чем суть.
Для безболезненного (т.е. без модификации исходного кода) расширения программы используется механизм т.н. "гнезд", т.е. своеобразных разъемов в коде, в который можно вставлять куски кода. Причем речь идет именно о коде во время компиляции, а не о runtime. Использование гнезд позволяет перейти от переписывания кода к дописыванию того, что вставляется в гнезда и последующей сборке. Программирование становится сборочным.
Гнезда, могут использоваться не только по тексту (скажем, в отдельных процедурах или даже в модулях), но и в повторяющихся конструкциях, например, в циклах или в метках case, для чего в гнездах используется соответствующий синтаксис.
Идея в книге высказывается замечательная. Проблема лишь в том, что код при описываемом подходе становится двумерным. Это заметно усложняет транслятор и
дополнительно меняет подход к созданию программы - приходится думать о компоновке и проектировании раньше, чем что-либо начинать писать (что, впрочем, скорее хорошо, чем плохо).
Идея создания гнезд в коде перекликается с точками расширения в ББ и технологией (паттерном?) inversion of control, но эта лишь малая часть из предложенного в книге. Кроме того, это отчасти похоже на обобщенное программирование, хотя подходы Ada к обобщенному программированию в книге разносятся в пух и прах.
Для меня остался нераскрытым вопрос типизации гнезд, т.е. механизм соотнесения между собой гнезда и его содержимого. Кроме того, не совсем не раскрыт вопрос вложения гнезд (в C++, насколько я знаю, вложение templates может привести к огромным накладным расходам при трансляции, поправьте, если не так).
Идея, конечно, просто просится к реализации.