為什麼純函式式語言至今無法流行起來?
程式設計可以從馮諾依曼風格中解放出來嗎?使用一種函式式風格及程式代數替代它?為什麼純函數語言程式設計無法成為主流?為什麼純函式式語言無法真正解決實際問題?CS大學裡那些書呆子的夢想式白日夢還是終有一天會實現?
馮諾依曼風格是一種語句與表示式的程式設計風格,而函數語言程式設計風格是建立在使用組合形式建立程式的基礎上。
這和哲學觀有關了,也許宇宙是基於狀態的,而不是基於函式的。
- 程式語言是為了代表現實,並根據您的意願操作它:物件導向和過程程式設計都使用函式來操作狀態。
- 而在純函式式語言中,您使用函式和未命名的變數來呈現狀態。
問題是當你相互呼叫程式時,你總是用狀態而不是函式來進行呼叫。從 API 到儲存資料,因為它允許非常不同的系統在沒有相同內部結構的情況下相互理解。
基於 java web 的 api/program 和在手機中執行的 swift/objective-c 程式可以很容易地通過狀態相互通訊,並且它們不必知道彼此的內部狀態.
如果使用函式式風格:您業可以像儲存狀態一樣儲存函式,並傳遞它們到其他系統,但接受傳遞的另一方必須知道如何執行它,並且擁有相同型別的硬體才能執行它。
純函數語言程式設計可能是數學家的白日夢,理論上那些 CS 書呆子試圖將數學/代數方程硬塞進預設的程式設計正規化型別,但對於實際的電腦科學問題,馮諾依曼風格(語句和表示式)已經贏了,因為它是最實用的!
唯一能真正成功的替代馮諾依曼狀態型別語言的實際上是 SQL 及其衍生物,它是一種宣告式程式語言。您可以傳遞 SQL 查詢,它們將被各種系統理解。但是,最終它們都作用於資料表中的某種狀態/資料。
當然,一些函式式概念,如 map/reduce,在主流語言中已經流行起來,因為它們在某些上下文場景中很有用,但純函式式語言卻沒有。
在現實世界中,一切都受時間和可變狀態支配。如果你使用函式式,您就無法迴避技術堆疊中某處的阻抗不匹配。
相關文章
- 瞭解 JavaScript 函數語言程式設計 -- 什麼是純函式JavaScript函數程式設計函式
- 一起來啃《JavaScript語言精粹》----函式JavaScript函式
- 為什麼Redux 需要 reducers是純函式?Redux函式
- javascript純函式是什麼JavaScript函式
- Solidity語言學習筆記————28、純函式Solid筆記函式
- 使用函式式語言來建立領域模型函式模型
- JavaScript函數語言程式設計(純函式、柯里化以及組合函式)JavaScript函數程式設計函式
- 【譯】JavaScript中純函式是什麼JavaScript函式
- 深入理解redux之reducer為什麼是純函式Redux函式
- JavaScript函數語言程式設計之深入理解純函式JavaScript函數程式設計函式
- Go 語言函式Go函式
- David Fowler :actor框架為什麼沒能流行起來?框架
- python是函式式語言嗎Python函式
- JavaScript 函式語法JavaScript函式
- [譯]掌握 JavaScript 面試:什麼是純函式?JavaScript面試函式
- GO語言————6.1 函式Go函式
- R語言函式-tolowerR語言函式
- C語言常用函式C語言函式
- C語言的函式C語言函式
- Go 語言 -make函式Go函式
- C語言 execve()函式C語言函式
- 使用函式式語言實踐DDD函式
- gin框架函式語法框架函式
- MySQL 函式語法整理MySql函式
- C語言 將函式(有參、無參)作為引數傳遞C語言函式
- 嵌入式開發為什麼選擇C語言?C語言
- GO語言————6.7 將函式作為引數Go函式
- 虛擬函式 純虛擬函式函式
- 武俠文化這兩年為什麼又流行起來了
- 『無為則無心』Python函式 — 33、高階函式Python函式
- 08. C語言函式C語言函式
- C語言 函式指標C語言函式指標
- go語言學習-函式Go函式
- C語言基礎函式C語言函式
- SQL語言基礎(函式)SQL函式
- C語言函式呼叫棧C語言函式
- 為什麼值型別不允許顯式定義無參建構函式型別函式
- C語言函式指標與回撥用函式C語言函式指標