Question:標題明明是「理論上最好的編程語言」,為什麼途中變成了「One language One system With All hardware」了呢?

Answer:這個參考第一篇:

王博文:理論上最好的編程語言: 起點動機篇?

zhuanlan.zhihu.com
圖標

當探討「理論上最好的編程語言」這個話題時,就涉及到一個「標準」問題——憑什麼說它是最好的?這個最好的標準是什麼?

有人說「當然是看它的開發活不活躍,社區火不火,社會供應的崗位有多少,薪資是多少啊」

是的,這種判斷方法很聰明,人總不能讓自己吃虧,一般情況下大眾的判斷很大概率也是對的,而且一種編程語言獲得的大眾支持越廣,用它做開發也就越容易。

但這僅僅適用於現在已經開發出來的編程語言。而且是用價值尺度來評價一個現有編程語言的好壞,而非真理尺度。

古時候有個成語故事叫做「指鹿為馬」,講的是秦國的權臣趙高,在皇帝面前故意將鹿稱為馬,而大臣們紛紛附和的故事。大臣們並不是不知道事實,只是出於利益而選擇了說謊話。這個故事在近代中國有一個很現實的翻版,那就是大躍進和文革。

那麼問題來了,評價編程語言的好壞,存在一個真理尺度嗎?

首先,真理尺度其實是一種更長遠的價值尺度,因為你很難說什麼是絕對真理,只是用真理尺度衡量出的價值往往會更長久,比如趙高垮了台,文革平了反。

然後,我從近現代編程語言對比彙編語言的優勢這個方面進行了考察,發現了近現代編程語言對彙編語言的最大優勢就是「建立了一個跨硬體指令集的邏輯平台」,雖然讀寫上的效果也是有的,但不是最主要的(畢竟彙編語言也有「宏」)

所以,我選擇的,評價編程語言好壞的一個重要標準就是「能否適用於所有硬體設備」,或者說「能否適用於所有可編程硬體設備」。

畢竟,編程語言是控制機器的文本(後來我把它發展成了人類可讀的 RDS 這個概念),越具有普適性的文本越優秀,於是 OOWA(One language One system With All hardware) 這個概念就誕生了。

Question:為什麼沒有實際去實現一門編程語言,而是來「理論上」探討(或者說嘴上探討)它,不會覺得膚淺么?

實際上,從最初邊看邊實踐 Build Your Own Lisp 上的內容,到自己翻閱 The LLVM Compiler Infrastructure Project 上的文檔,我發現實現一門編程語言的工作量非常大,而且在現有編程架構上,我能實現的最好的編程語言也不過是 C 第二,或者 C++ 第二,又或者 golang 第二。

大家已經有 C、C++ 和 golang 了,誰需要去使用這些語言的次級版呢?

而且編程語言的實際設計中,還真涉及到一個「甜豆腐好吃,還是咸豆腐好吃」的問題,也就是所謂的「約定俗成」。比如說在中國,車輛都是靠右行駛的,而在日本,車輛都是靠左行駛的,其實靠左行駛或者靠右行駛都是可以的,但是同一條街上的車子必須遵守同一準則,不然就會出現混亂。同樣的,古中文是從上到下寫行再從右往左寫列的(說明古人多數是左撇子),這在那時候沒問題,但現代人看就不習慣。現代的很多通信協議也是這樣,選左還是選右,選大端還是選小端都一樣,但你必須選一個。

這讓選擇恐懼症的人很苦惱,同時也給編程語言社區的分裂帶來了巨大的可能。

所以,我想先把編程語言設計上很關鍵的幾點想清楚,然後再看實際情況去實踐。我把編程語言和編譯器看成是「人造物」,而對於「人造物」,事先的設計就很重要。關於這點可以對比建築師所設計的建築和棚改區的亂搭亂建。

計算機軟體領域的人經常說「過早優化是萬惡之源」,這是不對的。一開始在設計上就不好的東西,就是前人挖坑埋後人,往往最後只能推倒重建。所以不是「過早優化」不好,而是有時候趕工期,要賺錢,一開始沒有全局觀,沒法過早優化。

Question:為什麼使用「狀態機」而不是選擇更接近計算機科學術語的「圖靈機」來解決問題呢?

首先,標準圖靈機里只有一根紙帶,它只關心計算機能不能把問題解出來,雖然也關心計算量,但並不關心計算的實際速度。

顯然,在現實中,計算速度十分重要,直接影響用戶體驗。所以用狀態機來描述更合適。

關於計算速度,並行性是很重要的一點。所以專門寫了這篇:

王博文:理論上最好的編程語言: 並行因果篇?

zhuanlan.zhihu.com
圖標

裡面的設計思想實際上萃取了 Haskell 的「純函數思想」,只是把「狀態機」添了進去。

在這裡,「狀態機中的子狀態機」或者說「RDS-IR in RDS-IR」(RDS 的邏輯運行位置)是 OOWA 很有特色的地方。這種想法直接讓 OOWA 中的狀態機和其他編程語言的 FSM (Finite State Machine)這種數據結構截然不同了。

Question:PHP 才是世界上最好的編程語言,元芳你怎麼看?

當然不是,PHP (以及 JSP 和 ASP)甚至本不應該成為一個編程語言,其實任何一種模板語言其實都是沒必要的。當你懂一種編程語言,然後了解怎麼進行字元串拼接,你就能實現一個模板語言能完成的功能。關於這點,可以參看:

王博文:理論上最好的編程語言: 封裝定則篇?

zhuanlan.zhihu.com
圖標

其實很多時候,你需要的只是關於 web 架構的知識,而不是 PHP。PHP 是個花招,即使 PHP 確實提供了一種服務端和前端混合在一起的視圖(view),還有成功的應用(比如 wordpress 和 wikipedia)。這也讓我體會到,一個編程語言成功與否,往往還在編程語言之外。

根據 When we share, everyone wins - Creative Commons 網站的協議,本文

署名-非商業性使用-相同方式共享

CC BY-NC-SA


推薦閱讀:
相关文章