Mai*_*tor 2 javascript compiler-construction optimization scheme haskell
世界上是否存在任何简单函数语言的编译器,例如本文中定义的函数语言,或者只是Scheme或甚至ML本身?也就是说,一个编译器将分析该简单函数语言的代码,执行复杂的优化,如流融合并返回优化的代码?
我需要这个的原因是我正在尝试将我的简单玩具语言(几乎是lambda演算+数字和数组)编译成JavaScript,但实际上,由于天真的编译器完全没有优化,因此它非常慢. .功能不是不复杂的,诸如(map f (map g h))未被融合的东西(map (f . g) h).实现优化编译器会带来很多工作.我曾想过利用GHC等现有编译器,但我还没有决定如何做到这一点.例如,我可以将我的语言编译为Haskell并将其编译回JavaScript,但大多数Haskell-> JS解决方案都不是最优的并且会产生大量的开销.这种现有的强大的优化编译器对于简单的函数式语言本身就会削减很多工作.世界上有没有?
GHC可以生成GHC-Core,这是一种类似Haskell的中间原始语言.它是在编译器的所有优化之后进行的,包括像流融合这样的高级内容.所以我想这可能是你完成任务的完美候选人.
来自文档:
格拉斯哥Haskell编译器(GHC)在编译器的简化阶段使用称为"Core"的中间语言作为其内部程序表示.核心类似于Haskell的一个子集,但具有多态lambda演算(Fω)风格的显式类型注释.
GHC的前端将完整的Haskell 98(加上一些扩展)转换为Core.然后GHC优化器反复转换核心程序,同时保留其含义.一个"Core Lint"在转换过程之间传递GHC typechecks Core(至少当用户通过设置编译器标志启用linting时),验证转换是否保留了类型正确性.最后,GHC的后端将Core转换为STG机器代码[stg-machine],然后转换为C或本机代码.