是否有OCaml工具支持使用Perl的Perl :: Critic模块等最佳实践?

时间:2011-01-03 09:41:23

标签: coding-style ocaml lint

是否存在分析OCaml程序并建议样式和代码有所改进的工具?在perl的世界中,仍然存在Perl::Critic以避免糟糕的风格。

我需要的是一些工具,不仅可以提示风格,还可以使事情更清晰,并避免在OCaml程序中不是尾递归的构造。

任何提示?

1 个答案:

答案 0 :(得分:9)

我没有使用它,但上周message on the Caml Groups提及了Mascot。它看起来就像你追求的那样。我不确定尾递归标准;上述项目的作者没有提及它们,但确实提到了插件功能。

或者,使用-dlinear(对于ocamlopt[.opt])进行编译将生成线性化代码,如果函数是尾调用,则会提及该代码。 -annot也会产生尾调用信息,但除了changelog之外我找不到引用(它在3.11.0中添加)。它标记尾调用的方式是什么,它不进行反转,标记非尾调用(或者可能有一种方法?)。下面是一个名为sum

的函数的输出示例
let rec sum a = function
    | x when x = 0 -> a
    | x -> sum (a+1) (x-1)

产生(在更多输出中),

*** 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]

我认为经验将成为你最好的选择。查看一些受欢迎的项目(例如Batteries),以了解样式和典型约定。我认为插件不会帮助您调用累加器变量acc或延续cont