在编译器设计中,命令式语言和函数式语言有什么区别?


命令式语言

命令式语言通过状态变化来实现计算。状态指的是计算机随机存取存储器 (RAM) 或存储器的条件。可以将计算机内存视为一系列快照,每个快照捕获特定时间所有内存单元中的值。每个快照记录一个状态。

当程序输入时,相关数据处于某种状态,例如脱机的未排序列表。程序员的工作是指定一系列对存储器的更改,以产生所需最终状态,例如排序列表。存储器包含的内容远不止数据和存储程序。它包括符号表、运行时堆栈 (S)、操作系统,其 CPU 本身也可以视为初始状态的一部分。

函数式语言

函数式语言是一种编程语言,其编程结构围绕逻辑函数或过程构建。它依赖于其程序流中的数学函数,并等同于数学函数。

函数式语言将其基本结构从λ演算和组合逻辑的数值结构中改变。Erlang、LISP、Haskell 和 Scala 是最著名的函数式语言。

命令式语言函数式语言
命令式语言基于冯·诺依曼架构。
函数式语言不基于冯·诺依曼架构。
程序员关心的是变量的管理以及向其赋值。
程序员不需要关心变量,因为不需要将内存单元抽象到语言中。
命令式语言使用状态变化来促进计算。
函数式语言促进程序表示的函数,而不是仅在程序逐语句执行时声明更改。
它可以提高执行效率。
它可能会降低执行效率。
它用于费力的程序构建。
比命令式语言编程所需的劳力更少。
它是一个非常简洁的语法框架。
它比命令式语言具有更复杂的语法结构。
并发执行难以设计和使用。
并发执行易于设计和使用。
语义难以理解。
与命令式语言相比,语义更简单。
程序员应该创建程序的静态划分,将其划分为并发元素,然后将其编写为函数。这可能是一个复杂的过程。
函数式语言中的程序可以由执行系统动态地分解为并发元素,从而使该过程高度适应其运行的硬件。
命令式语言的示例包括 C、C++、ADA、Pascal 等。
函数式语言的示例包括 LISP、ML、Scheme 等。

更新于:2021年10月23日

3K+ 次浏览

启动您的职业生涯

完成课程后获得认证

开始学习
广告