【发布时间】:2014-01-04 12:42:21
【问题描述】:
世界上是否有针对简单函数式语言的编译器,例如定义 on this article 的编译器,或者可能只有 Scheme 甚至 ML 本身?也就是说,一个编译器会分析那个简单的函数式语言的代码,执行复杂的优化,比如流融合,然后返回优化后的代码?
我需要这个的原因是我正在尝试将我的简单玩具语言(几乎是 lambda 演算 + 数字和数组)编译为 JavaScript,但实际上它非常慢,因为天真的编译器完全未优化。函数不是非柯里化的,(map f (map g h)) 之类的东西不会融合到(map (f . g) h) 中。实现优化编译器将构成much work。我曾考虑过利用现有的编译器,如 GHC,但我还没有决定如何实现。例如,我可以将我的语言编译为 Haskell 并将其编译回 JavaScript,但大多数 Haskell->JS 解决方案都不是最优的并且会产生大量开销。这种现有的针对简单函数式语言的强优化编译器本身会减少很多工作。世界上有吗?
【问题讨论】:
-
旁注,因为您计划编译为 JavaScript:您听说过 Google 的 Closure compiler 吗?它似乎执行了从 JavaScript 到 JavaScript 的大量内联。
-
是的,不,沉重不是你应该使用的形容词。它的优化是微不足道的。不过,这不是它的错,很多东西根本无法在纯 JS->JS 中进行优化。流融合是完全不可能的。
-
a case in point(您未来的编译器/优化器的测试用例)。纠结的基于列表的代码(在 Haskell 中),它实际上只表示一个嵌套循环,使用一个临时数组。 -- 说到循环,你熟悉this 和this。它可能是相关的(或者可能只是历史背景)。
-
这些都非常有用,谢谢!
标签: javascript haskell optimization compiler-construction scheme