我已经考虑这个问题很久了,但在Google上真的找不到答案,在Stackoverflow上也找不到类似的问题。如果有重复的,我很抱歉。
很多人似乎都说,用函数式语言编写编译器和其他语言工具,比如OCaml和Haskell,要比用命令式语言编写更高效、更容易。
这是真的吗?如果是这样的话--为什么用函数式语言而不是像C这样的命令式语言编写它们如此高效和容易呢?还有--函数式语言中的语言工具不是比一些低级语言(如C )中的慢吗?
发布于 2010-05-25 23:40:04
通常情况下,编译器会大量使用树。源代码被解析成语法树。然后,可以将该树转换为另一个带有类型注释的树,以执行类型检查。现在,您可以将该树转换为只包含核心语言元素的树(将类似于语法的符号转换为无糖形式)。现在,您可以执行各种优化,这些优化基本上就是对树的转换。之后,您可能会以某种标准形式创建一棵树,然后遍历该树以创建目标(汇编)代码。
函数式语言具有模式匹配和对高效递归的良好支持等特性,这使得处理树变得很容易,这就是为什么它们通常被认为是编写编译器的好语言。
发布于 2010-05-25 23:37:04
很多编译器任务都是在树结构上进行模式匹配。
OCaml和Haskell都有强大而简洁的模式匹配功能。
将模式匹配添加到命令式语言中比较困难,因为无论评估或提取什么值来匹配模式,都必须是无副作用的。
发布于 2010-05-25 23:51:26
要考虑的一个重要因素是,任何编译器项目的很大一部分都是什么时候可以自托管编译器并“吃自己的狗粮”。由于这个原因,当您查看像OCaml这样的语言时,它们往往具有针对编译器类型问题的强大功能。
在我上一次类似编译器的工作中,我们使用OCaml正是出于这个原因,同时操作C代码,它是完成这项任务的最佳工具。如果INRIA的人用不同的优先级构建OCaml,那么它可能就不是一个很好的匹配。
也就是说,函数式语言是解决任何问题的最佳工具,因此从逻辑上讲,它们是解决此特定问题的最佳工具。QED。
/me:返回到我的Java任务,有点不太愉快……
https://stackoverflow.com/questions/2906064
复制相似问题