在編譯器設計中,命令式語言和函式式語言有什麼區別?
命令式語言
命令式語言透過狀態變化來實現計算。狀態指的是計算機隨機存取儲存器 (RAM) 或儲存器的條件。可以將計算機記憶體視為一系列快照,每個快照捕獲特定時間所有記憶體單元中的值。每個快照記錄一個狀態。
當程式輸入時,相關資料處於某種狀態,例如離線的未排序列表。程式設計師的工作是指定一系列對儲存器的更改,以產生所需最終狀態,例如排序列表。儲存器包含的內容遠不止資料和儲存程式。它包括符號表、執行時堆疊 (S)、作業系統,其 CPU 本身也可以視為初始狀態的一部分。
函式式語言
函式式語言是一種程式語言,其程式設計結構圍繞邏輯函式或過程構建。它依賴於其程式流中的數學函式,並等同於數學函式。
函式式語言將其基本結構從λ演算和組合邏輯的數值結構中改變。Erlang、LISP、Haskell 和 Scala 是最著名的函式式語言。
命令式語言 | 函式式語言 |
---|---|
命令式語言基於馮·諾依曼架構。 | 函式式語言不基於馮·諾依曼架構。 |
程式設計師關心的是變數的管理以及向其賦值。 | 程式設計師不需要關心變數,因為不需要將記憶體單元抽象到語言中。 |
命令式語言使用狀態變化來促進計算。 | 函式式語言促程序序表示的函式,而不是僅在程式逐語句執行時宣告更改。 |
它可以提高執行效率。 | 它可能會降低執行效率。 |
它用於費力的程式構建。 | 比命令式語言程式設計所需的勞力更少。 |
它是一個非常簡潔的語法框架。 | 它比命令式語言具有更復雜的語法結構。 |
併發執行難以設計和使用。 | 併發執行易於設計和使用。 |
語義難以理解。 | 與命令式語言相比,語義更簡單。 |
程式設計師應該建立程式的靜態劃分,將其劃分為併發元素,然後將其編寫為函式。這可能是一個複雜的過程。 | 函式式語言中的程式可以由執行系統動態地分解為併發元素,從而使該過程高度適應其執行的硬體。 |
命令式語言的示例包括 C、C++、ADA、Pascal 等。 | 函式式語言的示例包括 LISP、ML、Scheme 等。 |
廣告