OCamlプログラムを分析し、スタイルとコードの改善を提案するツールはありますか?perlの世界には、悪いスタイルを避けるためのPerl::Criticがまだ存在します。
私が必要としているのは、スタイルについてだけでなく、物事をよりクリーンにし、OCamlプログラムで末尾再帰ではない構造を回避するためのヒントを作成するいくつかのツールです。
ヒントはありますか?
OCamlプログラムを分析し、スタイルとコードの改善を提案するツールはありますか?perlの世界には、悪いスタイルを避けるためのPerl::Criticがまだ存在します。
私が必要としているのは、スタイルについてだけでなく、物事をよりクリーンにし、OCamlプログラムで末尾再帰ではない構造を回避するためのヒントを作成するいくつかのツールです。
ヒントはありますか?
私はそれを使用していませんが、先週のCamlグループのメッセージはマスコットに言及しています。それはあなたが求めているもののようです。末尾再帰の基準についてはよくわかりません。上記のプロジェクトの作者はそれらについて言及していませんが、プラグイン機能については言及しています。
-dlinear
または、 (for )を使用してコンパイルするとocamlopt[.opt]
、関数が末尾呼び出しであるかどうかを示す線形化されたコードが生成されます。末尾呼び出し情報も生成されますが、変更ログ(3.11.0で追加された)-annot
以外の参照が見つかりません。末尾呼び出しにタグを付ける方法は何ですか。逆に、末尾以外の呼び出しにタグを付けることはありません(または方法はありますか?)。以下は、と呼ばれる関数の出力の例です。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]
でも、経験が最善の策になると思います。いくつかの人気のあるプロジェクト(たとえば、バッテリー)に目を通し、スタイルと典型的な慣習の感触をつかんでください。acc
プラグインがアキュムレータ変数または継続を呼び出すのに役立つとは思いませんcont
。