我想用静态类型语言进行一些元编程,我的程序和元程序都将被键入。我的意思是很强烈的:如果我的程序生成器可以编译,我希望类型系统足够强大,以便只能生成类型正确的程序。

据我所知,只有 梅奥卡米尔 可以做到这一点。(不,Template Haskell 和 C++ 模板都不符合要求——请参阅 这张纸)。问题:还有哪些其他语言/系统允许这样做?

编辑:据我所知,metaocaml 已经死了。奥列格 试图复活它, ,但这仍然落后于 OCaml 本身的几个版本。如果有人想使用实验性语言(即甚至比metaocaml更重要,似乎 乌尔 并且很可能 伊德里斯 符合要求。该领域还有其他新条目吗?

有帮助吗?

解决方案

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top