Coding style 是否有OCaml工具支持使用Perl';s Perl::Critic模块?

Coding style 是否有OCaml工具支持使用Perl';s Perl::Critic模块?,coding-style,ocaml,lint,Coding Style,Ocaml,Lint,是否有一个工具可以分析OCaml程序并在样式和代码方面提出一些改进建议?在perl的世界中,仍然存在避免糟糕风格的方法 我需要的是一些工具,这些工具不仅可以提示样式,还可以使事情更清晰,避免OCaml程序中的尾部递归结构 有什么提示吗?我没有用过,但上周有人提到过。看来这就是你想要的。我不确定尾部递归的标准;上述项目的作者没有提到它们,但提到了插件功能 或者,使用-dlinear(对于ocamlopt[.opt])编译将生成线性化的代码,其中会提到函数是否为尾部调用-annot也会生成尾部调用信

是否有一个工具可以分析OCaml程序并在样式和代码方面提出一些改进建议?在perl的世界中,仍然存在避免糟糕风格的方法

我需要的是一些工具,这些工具不仅可以提示样式,还可以使事情更清晰,避免OCaml程序中的尾部递归结构

有什么提示吗?

我没有用过,但上周有人提到过。看来这就是你想要的。我不确定尾部递归的标准;上述项目的作者没有提到它们,但提到了插件功能

或者,使用
-dlinear
(对于
ocamlopt[.opt]
)编译将生成线性化的代码,其中会提到函数是否为尾部调用
-annot
也会生成尾部调用信息,但除了(它是在3.11.0中添加的)之外,我找不到其他引用。它以什么方式标记尾部调用,而不是相反的方式标记非尾部调用(或者有什么方法?)。下面是名为
sum
的函数的输出示例

let rec sum a = function
    | x when x = 0 -> a
    | x -> sum (a+1) (x-1)
生产(在更多的产出中)

我认为经验是你最好的选择。浏览一些流行的项目(例如),了解风格和典型惯例。我认为插件不会帮助您调用累加器变量
acc
或continuations
cont

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