標籤:

理論上最好的編程語言: 讀寫省略篇

接上篇:

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

zhuanlan.zhihu.com圖標

在編程過程中,讀代碼和寫代碼是兩個不同的過程。

當我們讀代碼時,我們希望盡量從當前的代碼中獲取足夠的信息以明確當前代碼的功能與實行效果。這就要求被讀的代碼能提供足夠明確的信息以滿足閱讀者的需求。

而當我們寫代碼時,我們希望盡量少寫,目的是在減少工作量的情況下仍能保證完成編碼需求。這就使得我們寫代碼時經常會有慣例的省略、大量的引用、深層次的加工(比如說)以減少實際編寫的代碼量。

這兩者是一對矛盾。我們讀代碼的時候希望代碼盡量詳細,而我們寫代碼的時候則希望盡量使用默認的省略以及能減少代碼量的抽象棧(譬如說)。

程序源代碼,在我看來,理應將可讀性放在「寫的省麻煩」之前。因為一份源碼會有很多人讀,但是寫代碼的方式卻常常是因人而異。因此,程序源代碼應該儘可能是可讀碼,直接寫可讀碼的方式是正常方式,而特殊的寫代碼方式則稱為「省略式」。

舉例來說,C 語言的

int i=0;

就是在當前 RDS-IR 之中(或者說上下文之中)創建了一個類型為整型,初值為 0 的數據結構,這個用以下可讀碼(暫定)表示:

[create-DS ↑i type:"int" init-value:0]

這裡 ↑ 代表輸出,表示 create-DS 這個函數輸出了數據類型為整型的數據 i 到其"上一級" RDS-IR 中。

同樣舉例來說,lisp 語言的

(* 3 (+ 1 2))

可以視為如下的可讀碼(暫定):

[run (↑result a:1 b:2 c:3 )

[+ ↑output ↓a ↓b]

[* ↑result ↓output ↓c]

]

其中 run 函數是 + 運算和 * 運算的"上一級" RDS-IR ,它表示在括弧中的輸入參數輸入後,直接順序執行括弧後的代碼,並且將結果(result)輸出。↓前綴代表該符號是輸入。

由此可以看到 lisp 語言確實十分簡潔,但是它實際上還是一種"省略式",因為它省略了每一級括弧的輸出(默認輸出就是括弧執行完之後的返回值),但是這種"省略式"在減少代碼量上十分有用。同樣 C 語言,它也是一種"省略式",這種省略式的出現往往和自然語言和數理邏輯語言的寫法有關,我們在自然語言中就有大量的省略,這點同樣遺傳給了數理邏輯語言,進而遺傳給了編程語言。

然而,明確地寫的可讀碼會讓代碼變得臃腫,而且有時候我們需要對代碼進行一些特殊方式的閱讀(譬如說查找出所有關鍵詞進行更改,或者對代碼的大致框架做一個了解)。這時,我們就需要一些特別的視圖去觀察這些代碼,因而我們需要一整套集成開發環境(Integrated Developing Environment, 縮寫為 IDE)去完善這些功能。

OOWA 這個詞是 One programming language One system With All hardware 的縮寫。裡面的 One system 其實就是指這樣的一種集成開發環境。這個開發環境可以被用來設計一個新的操作系統,這種操作系統將只用 OOWA 這一種編程語言,然後將其他編程語言的特點歸結到 OOWA 的"省略式"里。

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

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

CC BY-NC-SA

下篇:

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

zhuanlan.zhihu.com圖標
推薦閱讀:

前端開發學習路線分享,學前端要學哪些內容?
Rebol/Red,讓編程回歸人性
C語言基礎:指針做參數
CovScript教程:前言
測試的道理

TAG:編程語言 |