解决方案
F#可以通过代码语录的
其他提示
为此,您必须确保元程序本身直接遵守/检查底层语言的类型系统。实际上,这几乎迫使元编程采用底层语言......所以我想我对你能够在metaocaml 中做到这一点并不感到惊讶。
我们大多数人都没有将元编程工具内置到底层语言中(C++ 是一个例外,我拒绝它,并且基于反射的系统太弱而无法执行任意转换)。
一个系统可以执行 随意的 代码上的转换(或由这些集合组成的元程序)是 DMS 软件重组工具包. 。DMS 具有许多真实语言的前端,在解析时构建编译器数据结构(包括 AST)。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.
沉(齐Lisp的II)理应可以/将: http://groups.google.com/group/qilang/browse_thread/thread/d62fc0d9f576838c