Напечатанные метапрограммирование языков [закрыто

StackOverflow https://stackoverflow.com/questions/3037643

  •  27-09-2019
  •  | 
  •  

Вопрос

Я хочу сделать немного MetaProgmamming на статически наведенном языке, где будут напечатаны мои программы, так и мои мета-программы. Я имею в виду это в сильном смысле: если мой программный генератор компилирует, я хочу, чтобы система типа была достаточно сильной достаточно сильной, что могут быть созданы только правильные программы типа.

Насколько я знаю, только метаокамл могу сделать это. (Нет, ни один шаблон Haskell, ни C ++ шаблоны не соответствуют законопроекту - см. Эта бумага). Вопрос: какие другие языки / системы позволяют этому?

Редактировать: Насколько я могу сказать, MetaoCaml мертв. Олег пытался воскресить это, но это все еще застрял несколько версий за самим ocaml. Если кто-то хочет пойти с экспериментальными языками (то есть еще больше, чем MetaoCaml, кажется, что Ур и вполне возможно Idris. соответствовать законопроекту. Любые другие новые записи на поле?

Это было полезно?

Решение

F # может сделать это тоже через Комиссия.

Другие советы

Для этого необходимо убедиться, что тип типа базовых языков непосредственно оценена / проверяется самой метапрограммой. В качестве практического вопроса это почти заставляет метапрограммирование быть в основном языке ... Поэтому я думаю, что я не удивлен, что вы сможете сделать это в MetaoCaml.

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

Система, которая может проводить произвольный Преобразования (или метапрограммы, состоящие из наборов тех) на код, является Программное обеспечение DMS Reenginering Toolkit. Отказ DMS имеет передние концы для многих настоящих лангauges, создает структуры данных компилятора при анаразбинии (включая ASTS). DMS предоставляет Преобразования программы источника к источнику которые представляют преобразования как AST-перезаписи, используя синтаксис поверхности целевого языка. Это соответствует вашему требованию к определенной степени: если правила вашей преобразования синтаксически правильны (и они проверяются DMS), то преобразованная программа будет синтаксически правильной. Он не добивается вашего требования правильности типа правильности, поскольку механизмы проверки типов реализуются за пределами целевого языка. В главном случае можно надежную проверку типа, чтобы увеличить преобразования программы; На практике мы обнаружили, что мы можем надежно пересекать преобразования.

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

Метапрограммирование времени компиляции в Scala.

Our flavor of macros is reminiscent of Lisp macros, adapted to incorporate type safety and rich syntax. Unlike infamous C/C++ preprocessor macros, Scala macros: 1) are written in full-fledged Scala, 2) work with expression trees, not with raw strings, 3) cannot change syntax of Scala.

Шен (Ци Лисс II), предположительно может / будет:http://groups.google.com/group/cilang/browse_thread/thrad/d62fc0d9f576838c.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top