1

OCaml では、パターンマッチングの順序とパフォーマンスに関係はありますか?

たとえば、型を宣言すると:

type t = A | B | C

次に、次のようにパターン マッチングを実行します。

match t1 with
  | A -> ...
  | _ -> ...

パフォーマンスの観点から、それは同等ですか

match t1 with
  | B -> ...
  | _ -> ...

最初のケースでは、2 番目のケースと同じ数の A があると仮定しますか?

つまり、パフォーマンスを考慮する場合、型内のコンストラクターの宣言の順序を気にする必要がありますか?

4

2 に答える 2

2

これは、慎重に答えることが不可能な質問です。ただし、実際には、コンストラクターがすべて nullary (つまり、小さな整数と同等) である型があり、それらの数が非常に少ないが、それらの膨大な山よりも少ない場合、コード ジェネレーターはほぼ確実にハードウェア ジャンプ テーブルを使用すると、可能な値ごとに基本的に同じパフォーマンスが得られます。

一般に、コードの遅い部分を特定するまで、このようなことについてはまったく心配しません。しかし、nullary コンストラクターのセットを並べ替えることで処理を高速化できる可能性はほとんどありません。

于 2013-05-01T16:14:49.943 に答える