erlang编译选项的用途是什么:" - compile({parse_transform,ms_transform})".

kev*_*vin 1 erlang compilation

作为标题,是否有人可以解释使用ms_transform的parse_transform?它与它之间有什么不同?

rvi*_*ing 6

-compile({parse_transform, ms_transform}).语法调用解析变换.

解析变换是文件或输入已经被解析之后,编译器调用的模块.使用整个模块的完整抽象语法调用该模块,并且必须为整个模块返回一个新的抽象.只要结果是合法的erlang语法,就允许解析转换做任何想做的事情.它就像一个超级宏设施,它不仅可以在单个函数调用上运行整个模块.然后编译生成的模块.您可以进行许多解析转换.

Parse变换通常用于进行编译时评估和代码转换.在ets:fun2ms通过@P_A提到呼叫是因为它需要一个有趣的和在编译时变换成这个的一个典型的例子匹配规范,参见MatchspecsETS:fun2ms.但是解析转换允许您执行更多操作,例如添加和删除功能.一个例子是解析变换,它为记录中的所有字段生成访问函数.

它是一个非常强大的工具,但不幸的是容易出错,因此造成了一个真正的混乱.但是,有一些第三方支持工具可能非常有用.