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

命令式语言

命令式语言是那些通过状态变化来促进计算的语言。状态是指计算机的随机存取存储器 (RAM) 或存储器的状态。将计算机内存视为一系列快照会很有帮助,每个快照都在特定时间捕获所有内存单元中的值。每个快照记录一个状态。

当一个程序被输入时,相关数据存在于某种条件下,比如一个未排序的离线列表。程序员的工作是指定对 store 的一系列更改,以产生所需的最终状态,可能是一个排序列表。存储涉及的不仅仅是数据和存储的程序。它包括一个符号表、运行时堆栈 (S)、一个操作系统,其 CPU 本身可以被视为初始状态的一部分。

函数式语言

函数式语言是在其编程结构中建立在逻辑函数或过程之上并围绕其构建的编程语言。它依赖于并等效于其程序流程中的数学函数。

函数式语言从 Lambda 演算和组合逻辑的数值结构改变了它们的基本结构。Erlang、LISP、Haskell 和 Scala 是最著名的函数式语言。

命令式语言函数式语言
Imperative languages are based on Von-Neumann Architecture.
函数式语言不是基于冯诺依曼架构。
The programmer is concerned with the management of variables and the assignment of values to them.
程序员不需要关心变量,因为不需要将存储单元抽象到语言中。
The imperative languages facilitate the computation using the state changes.
函数式语言促进了程序所表示的功能,而不是仅在程序执行时逐条陈述更改。
It can increase the efficiency of execution.
它会降低执行效率。
It is used for the laborious construction of programs.
与使用命令式语言编程相比,所需的劳动力更少。
It is a very clean syntactic framework.
它是一种比命令式语言复杂得多的语法结构。
Concurrent execution is difficult to design and use.
并发执行易于设计和使用。
The semantics are difficult to understand.
与命令式语言相比,语义很简单。
The programmer should create a static division of the program into its concurrent elements, which are then written as functions. This can be a complex process.
函数式语言中的程序可以被执行系统动态分解为并发元素,从而创建对运行它的硬件高度灵活的过程。
An example of imperative languages includes C, C++, ADA, Pascal, etc.
函数式语言的例子包括 LISP、ML、scheme 等。
猜你喜欢