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