只是一个随机的思考,看着我的无数次length调用,我发现编译器可以通过不变性和引用透明度来判断任何列表的长度(即使新的列表concat来自现有的已知列表/代码路径).那么它可能会在低级代码生成期间的某个阶段length l用实际的 int常量替换所有"调用" ,对吗?
想知道它是否确实存在,或者我是否在初学者中缺少关于纯函数式语言/编译器的东西.
我相信这个问题是问是否GHC转,例如,length [1,2,3]为3在编译时间.GHC 8.0.1是进行此优化的第一个GHC版本(至少在我安装的版本中).
现在,让我们转到问题的第二部分.让我们从维基百科的GHC的第一个beta版本的日期作为GHC的开始日期:1991年4月1日.GHC 8.0.1于2016年5月发布.所以,看来您的理论认为这是一个特征化的优化在这种情况下,验证了25年以上的编译器项目.