ano*_*nol 1 performance ocaml pattern-matching
在 OCaml 中,模式匹配中的顺序和性能之间有什么关系吗?
例如,如果我声明一个类型:
type t = A | B | C
Run Code Online (Sandbox Code Playgroud)
然后执行一些模式匹配如下:
match t1 with
| A -> ...
| _ -> ...
Run Code Online (Sandbox Code Playgroud)
从性能的角度来看,是否等价于
match t1 with
| B -> ...
| _ -> ...
Run Code Online (Sandbox Code Playgroud)
假设在第一种情况下,A 的数量与第二种情况中的 B 的数量一样多?
换句话说,在考虑性能时,我是否应该担心类型中构造函数的声明顺序?
有一篇论文解释了如何在 OCaml 中编译模式匹配:“优化模式匹配”,L. Maranget 和 F. Le Fessant,ICFP'01
它基本上说语义是“按顺序”的,但它通常以最佳方式编译,与行的顺序无关。构造函数的值也不重要,重要的是构造函数的数量,即它是由比较树编译的,还是由跳转表编译的。
最优性 + 穷举性测试使得 OCaml 中的模式匹配可能是该语言最美妙的特性,并且比手动编写“if”级联更有效。