我没有钻牛角尖,我最近在写 Python 的 parser 和 compiler,所以对这方面的问题知道的多一点。
从你这个回答,我认为你把编译的过程和结果弄混了。编译结果是什么,不管是不是 jmp table ,在这个讨论里并不重要。因为我们讨论的是编译过程的复杂度。
而一旦遇到了 pattern match 的语法,就必须做 constraints 分析,哪怕最终的结果是整个语法块都可以去除。所以,pattern match 是为了更容易优化,或者 pattern match 可以导致更优化的 target ,都不成立。事实上,if-else 同样可以编译出 jmp table 的 target 。
【 在 poocp 的大作中提到: 】
:
: 为啥我觉得你是在钻牛角尖。case的最好优化结果就是jmp table,最坏优化结果就是等价的if else。
:
: 【 在 philbloo 的大作中提到: 】
: : 当然,pattern match __可以__ 应用在泛型上,但这个问题的本质与泛型无关,开始那个链接里的例子就完全与泛型无关。因为这个问题在于要找出所有 case 是否 exhaustive,以及是否存在不可解的 contradiction,换句话说,是做 constraints based analysis 。
#发自zSMTH@Moto Z3 Play
--
FROM 37.33.57.*