為什麼純函式式語言至今無法流行起來?

發表於2021-06-19

程式設計可以從馮諾依曼風格中解放出來嗎?使用一種函式式風格及程式代數替代它?為什麼純函數語言程式設計無法成為主流?為什麼純函式式語言無法真正解決實際問題?CS大學裡那些書呆子的夢想式白日夢還是終有一天會實現?

馮諾依曼風格是一種語句與表示式的程式設計風格,而函數語言程式設計風格是建立在使用組合形式建立程式的基礎上。

這和哲學觀有關了,也許宇宙是基於狀態的,而不是基於函式的。

  • 程式語言是為了代表現實,並根據您的意願操作它:物件導向和過程程式設計都使用函式來操作狀態。
  • 而在純函式式語言中,您使用函式和未命名的變數來呈現狀態。

問題是當你相互呼叫程式時,你總是用狀態而不是函式來進行呼叫。從 API 到儲存資料,因為它允許非常不同的系統在沒有相同內部結構的情況下相互理解。

基於 java web 的 api/program 和在手機中執行的 swift/objective-c 程式可以很容易地通過狀態相互通訊,並且它們不必知道彼此的內部狀態.

如果使用函式式風格:您業可以像儲存狀態一樣儲存函式,並傳遞它們到其他系統,但接受傳遞的另一方必須知道如何執行它,並且擁有相同型別的硬體才能執行它。

純函數語言程式設計可能是數學家的白日夢,理論上那些 CS 書呆子試圖將數學/代數方程硬塞進預設的程式設計正規化型別,但對於實際的電腦科學問題,馮諾依曼風格(語句和表示式)已經贏了,因為它是最實用的!

唯一能真正成功的替代馮諾依曼狀態型別語言的實際上是 SQL 及其衍生物,它是一種宣告式程式語言。您可以傳遞 SQL 查詢,它們將被各種系統理解。但是,最終它們都作用於資料表中的某種狀態/資料。

當然,一些函式式概念,如 map/reduce,在主流語言中已經流行起來,因為它們在某些上下文場景中很有用,但純函式式語言卻沒有。

在現實世界中,一切都受時間和可變狀態支配。如果你使用函式式,您就無法迴避技術堆疊中某處的阻抗不匹配。

 

相關文章