Здравствуйте, LaptevVV, Вы писали:
LVV>Синтаксические макросы — это подстановка на этапе компиляции с проверкой получившегося синтаксиса. LVV>Как все, надеюсь, понимают, шаблоны — это разновидность синтаксических макросов по классификации Кемпбела-Келли.
Не совсем.
Шаблоны участвуют в системе типов.
Шаблон класса не просто принимает на вход набор аргументов, подставляет что-то куда-то и выдаёт AST некой структуры с полями, именами и прочим добром.
Он ещё и тип этой структуры определяет.
И ещё он несёт информацию о своих аргументах, что позволяет сопоставлять их и извлекать — с помощью других шаблонов.
Шаблон функции участвует в перегрузках и задаёт приоритет (нешаблонные перегрузки предпочтительнее шаблонных, специализации предпочтительнее основного шаблона).
Это несколько выходит за рамки функций над AST, не так ли?
LVV>Кстати, был в свое время такой компилятор Clipper для языка Dbase II LVV>Там в 5-й версии синтаксические макросы расцвели просто невообразимо.
О да! И, насколько помню, он прямо с самого начала был макроязыком над дубасей.
Но при этом что-то ни у кого не возникало попыток хотя бы чисто академических накатить на клиппер арифметику Пеано или ещё какую-нибудь такую фигню.
Был ли он тьюринг-полным? Ой сомневаюсь.
Ну, может, в пятой версии прикрутили фич?