2013-10-10 52 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。