[Закрываются] введенные языки метапрограммирования

15
задан Jacques Carette 12 November 2011 в 19:23
поделиться

3 ответа

F # тоже может сделать это с помощью Code Quotations .

6
ответ дан 1 December 2019 в 03:24
поделиться

Для этого вы должны убедиться, что система типов нижележащего языка напрямую учитывается / проверяется самой метапрограммой. С практической точки зрения, это почти заставляет метапрограммирование быть на основном языке ... так что я не удивлен, что вы можете сделать это в metaocaml.

Большинство из нас не имеет инструментов метапрограммирования, встроенных в базовый язык (C ++ является скорее исключением, и я отвергаю его и системы, основанные на отражении, как слишком слабые для выполнения произвольных преобразований).

Система, которая может выполнять произвольные преобразования (или метапрограммы, составленные из их наборов) в коде, - это DMS Software Reengineering Toolkit . DMS имеет внешние интерфейсы для многих реальных языков, строит структуры данных компилятора при синтаксическом анализе (включая AST). DMS предоставляет преобразования программы из исходного кода , которые представляют преобразования в виде перезаписи AST с использованием поверхностного синтаксиса целевого языка. Это в определенной степени соответствует вашим требованиям: если ваши правила преобразования синтаксически правильны (и они проверены DMS), то преобразованная программа будет синтаксически правильной. Это не соответствует вашим требованиям к правильности типов, поскольку механизмы проверки типов реализованы за пределами целевого языка. В принципе, можно было бы использовать средство проверки безопасности типов для расширения программных преобразований; на практике мы обнаружили, что можем достаточно надежно кодировать преобразования.

И даже если у вас есть типобезопасные преобразования, у вас нет гарантии семантической безопасности по отношению к вашей исходной программе. Так что вам все равно придется отлаживать метапрограммы.

8
ответ дан 1 December 2019 в 03:24
поделиться
6
ответ дан 1 December 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: