And*_*yke 8 ocaml coding-style lint
是否存在分析OCaml程序并建议样式和代码方面的一些改进的工具?在perl的世界中,仍然存在Perl :: Critic以避免糟糕的风格.
我需要的是一些工具,它们不仅可以提示风格,还可以使事情更清晰,并避免在OCaml程序中不是尾递归的构造.
任何提示?
我没有用它,但上周Caml集团的消息提到了Mascot.它看起来就像你追求的那样.我不确定尾递归标准; 上述项目的作者没有提及它们,但确实提到了插件功能.
或者,用-dlinear(for ocamlopt[.opt])编译将产生线性化代码,如果函数是尾调用则提及.-annot还会生成尾调用信息,但除了更改日志之外我找不到引用(它在3.11.0中添加).它标记尾调用的方式是什么,它不进行反转,标记非尾调用(或者可能有一种方法?).下面是一个名为的函数的输出示例sum,
let rec sum a = function
| x when x = 0 -> a
| x -> sum (a+1) (x-1)
Run Code Online (Sandbox Code Playgroud)
产生(在更多输出中),
*** Linearized code
camlTail__sum_58:
if x/30[%rbx] !=s 1 goto L100
return R/0[%rax]
L100:
I/31[%rbx] := I/31[%rbx] + -2
I/32[%rax] := I/32[%rax] + 2
tailcall "camlTail__sum_58" R/0[%rax] R/1[%rbx]
Run Code Online (Sandbox Code Playgroud)
我认为经验将成为你最好的选择.查看一些受欢迎的项目(例如,电池),以了解风格和典型的惯例.我不认为插件会帮助您调用累加器变量acc或延续cont.