2013-10-10 23 views
7

在OCaml 4.00中增加了一个来自Alain Frisch of Lexifi over a year ago for an alternative to camlp4 for writing sytnax extensions making use of the -ppx flag的建议。当时他提到还有一些工作要做(属性,引用等),但它已经有用了。 OCaml 4.01是否改进了对这种编写语法扩展风格的支持?现在有人使用这种机制而不是camlp4,或者camlp4仍然是为OCaml编写语法扩展的推荐方式吗?OCaml的-ppx语法扩展的状态是什么?

回答

10

“(属性,引号等)”的工作由Alain以OCaml编译器源的一个分支的形式完成,名为扩展点。在该分支上的进展在公众wg-camlp4邮件列表上进行了广泛讨论,但未集成到4.01中。自4.01发布以来,它已被集成到trunk(编译器的参考开发分支)中,所以它应该可用于4.02(请注意,主要版本目前倾向于每年发布)。

Alain在trunk/experimental/frisch/extension_points.txt中维护一种针对扩展点的文档格式。它明显不包括全部 Camlp4的用例,但仍然是其中的一大部分。你是否宁愿使用这是一个个人决定;这个承诺是稍微笨拙的语法为您提供了更易于部署和与工具和其他扩展的互操作性。

从4.00或4.01开始,-ppx不适用于语法扩展,您只能处理(也可能是过滤/转换)语法有效的OCaml代码。颠覆现有的OCaml语法来增加新的含义在技术上是可行的,但我会建议不要这样做。如果你想使用它来扩展语法,你应该等待4.02。