2011-01-03 13 views
8

OCamlプログラムを解析し、スタイルやコードの改善を提案するツールはありますか? perlの世界では、悪いスタイルを避けるためにまだPerl::Criticが存在します。PerlのPerl :: Criticモジュールなどのベストプラクティスの使用をサポートするOCamlツールはありますか?

私が必要とするのは、スタイルだけでなく、OCamlプログラムで尾を再帰的に使用しないような構造を避けるためのヒントです。

ヒント

答えて

9

私はそれを使用していませんが、message on the Caml Groups先週にはMascotと記載されています。あなたが何をしているかのように見えます。私は末尾再帰の基準についてはわかりません。上記のプロジェクトの作者はそれらについて言及していませんが、プラグインの機能について言及しています。

-dlinearocamlopt[.opt])をコンパイルすると、その関数がテールコールであるかどうかを示す線形コードが生成されます。 -annotもテールコール情報を生成しますが、changelog(3.11.0で追加されました)以外の参照は見つかりません。どのような方法でタグのテールコールを行うのですか?それは逆ではありませんが、テール以外のコールにタグを付けることはできません。以下は、私が経験はしかし、あなたの最善の策になるだろうと思います

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

let rec sum a = function 
    | x when x = 0 -> a 
    | x -> sum (a+1) (x-1) 

は(はるか出力間)を生成し、sumと呼ばれる関数の出力例です。スタイルと典型的な慣習を感じるには、いくつかの人気プロジェクト(例えばBatteries)を見てください。私はプラグインがアキュムレータ変数accまたは継続contを呼び出すのを手助けするつもりはないと思います。

関連する問題