请问大家了解函数式语言编译器的实现技术嘛?
函数式语言编译器的实现和传统编译器是差不多的（区别只是多了closure calculus)纯函数式编译器有相当一部分精力的时间花在lazy evaluation这种calling convention上，研究过的人都知道各种抽象机器Krivine machine, G machine, 其实是failed experiment, lazy evaluation不适合作为一种“通用”的计算模型。这也让strict 的fp走了很多弯路。比如经典的ZINC虚拟机，其实也是解决一个可以从设计上避免的问题。由于传统的lambda演算所有的函数都是一个参数，这样 (f a1 .. an) 会产生太多的临时的closure, ZINC虚拟机为了避免这个问题，引入了从右到左这种反直觉的计算模型。这个问题完全从设计上可以避免。但是还有一个更致命的问题，这种抽象机器与现代计算机的体系结构是不一致的，所以性能不可能会太好。唯一的优点是实现起来比较简单，但是"简单"的前提是确实懂它的理论,所以对普通人来说并不"简单"。从纯后端来讲，函数式语言编译器主要要解决的问题是closure如何高效的编译。1. 尽可能通过静态分析避免生成closure。closure也是和现代计算机流水线架构相违背的。比如 [[ a b]] 大致可以等价于 let  (code_pointer, env) as closure = a in code_pinter(closure,b). 这个不可能太高效的，因为现代流水线结构,code_pointer是动态的会stall pipeline, 所以主要工作在于静态分析，编译优化对于non escaped function尽量避免生成closure.2. closure representation的一些trick 这个可以参考Appel的数据compiling with continuations里面关于closure的相关章节3. pattern match compilation 这个可以参考Simon Peyton Jones的the implementation of functional languages。（这一块应该属于中端) 类型理论属于前端或者中端，可以参考这本书"the functional approach to programming"里面有HM类型的完整解释，通俗易懂。