首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么用函数式语言编写编译器更容易?

为什么用函数式语言编写编译器更容易?
EN

Stack Overflow用户
提问于 2010-05-25 23:26:23
回答 7查看 13K关注 0票数 90

我已经考虑这个问题很久了,但在Google上真的找不到答案,在Stackoverflow上也找不到类似的问题。如果有重复的,我很抱歉。

很多人似乎都说,用函数式语言编写编译器和其他语言工具,比如OCaml和Haskell,要比用命令式语言编写更高效、更容易。

这是真的吗?如果是这样的话--为什么用函数式语言而不是像C这样的命令式语言编写它们如此高效和容易呢?还有--函数式语言中的语言工具不是比一些低级语言(如C )中的慢吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-05-25 23:40:04

通常情况下,编译器会大量使用树。源代码被解析成语法树。然后,可以将该树转换为另一个带有类型注释的树,以执行类型检查。现在,您可以将该树转换为只包含核心语言元素的树(将类似于语法的符号转换为无糖形式)。现在,您可以执行各种优化,这些优化基本上就是对树的转换。之后,您可能会以某种标准形式创建一棵树,然后遍历该树以创建目标(汇编)代码。

函数式语言具有模式匹配和对高效递归的良好支持等特性,这使得处理树变得很容易,这就是为什么它们通常被认为是编写编译器的好语言。

票数 104
EN

Stack Overflow用户

发布于 2010-05-25 23:37:04

很多编译器任务都是在树结构上进行模式匹配。

OCaml和Haskell都有强大而简洁的模式匹配功能。

将模式匹配添加到命令式语言中比较困难,因为无论评估或提取什么值来匹配模式,都必须是无副作用的。

票数 39
EN

Stack Overflow用户

发布于 2010-05-25 23:51:26

要考虑的一个重要因素是,任何编译器项目的很大一部分都是什么时候可以自托管编译器并“吃自己的狗粮”。由于这个原因,当您查看像OCaml这样的语言时,它们往往具有针对编译器类型问题的强大功能。

在我上一次类似编译器的工作中,我们使用OCaml正是出于这个原因,同时操作C代码,它是完成这项任务的最佳工具。如果INRIA的人用不同的优先级构建OCaml,那么它可能就不是一个很好的匹配。

也就是说,函数式语言是解决任何问题的最佳工具,因此从逻辑上讲,它们是解决此特定问题的最佳工具。QED。

/me:返回到我的Java任务,有点不太愉快……

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2906064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档