假设我们有一个这样的程序:
list = [1..10000000]
main = print $ sum list
我希望将其编译为可执行文件仅打印 50000005000000,而无需花费太多时间和精力。
基本上,任何肯定会被计算的表达式(也许严格性分析在这里会有所帮助)都可以在编译期间预先计算(即我们使用引用透明性来表示计算值时并不重要)。
简而言之:“必须计算”+参考透明度=可以预先计算
这就像运行程序,直到我们遇到依赖于输入的东西(即程序的核心,所有输入通用的,将被预先计算)
目前是否有实现这一目标的现有机制(用 Haskell 或任何其他语言)?[请不要指向 C++ 中的模板之类的东西,因为它首先没有引用透明性。]
如果不是,这个问题有多难?[伴随的技术(和理论)问题是什么?]