標籤:

理論上最好的編程語言: 哲學基礎篇

接上篇:

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

zhuanlan.zhihu.com圖標

2016 年 3 月份,谷歌圍棋人工智慧 AlphaGo 以 4:1 的總比分下贏了韓國圍棋選手李世石,這個事件再次將 AI(Artificial Intelligence)的概念和技術推向了輿論的風口浪尖。雖然媒體對這個事件進行了各式各樣的渲染,但我對這件事情的反應非常平淡——僅僅是想到了中學課本中的《荀子.勸學篇》:

登高而招臂非加長也,而見者遠;

順風而呼,聲非加疾也,而聞者彰。

假輿馬者,非利足也,而致千里;

假舟楫者,非能水也,而絕江河。

馬奔跑的速度總是比人快,而舟船能在水面上呆著的時間也比人長了很多很多。善於利用工具的人類往往比不利用工具的人類強了一個層次。而人類利用的工具也在人類歷史的長河中為人所改造進化,從自然存在的東西變為了人造的東西。這個 世界 -> 人類 -> 人造工具 的過程如下圖所示:

圖一:世界-人類-人造工具

這裡,我用 input output inout(也就是一對 input output 的壓縮) 來表現不同認知實體間的相互作用。

這樣,我們可以明確認識到哲學上的"矛盾螺旋"("否定之否定")實際上就是人類與人類外部世界間 input output 循環磨合的過程。在這個過程中,我們對世界進行了改造,誕生了 artificial tools(人造工具)這塊認知實體。

編程語言就是 artificial tools 中的一部分。而依照編程語言規範而寫出的程序源代碼,即是可被編譯器編譯以用於控制機器行為的文本。

為了更清楚地表達"程序源代碼"和普通文本的不同,這裡我要從"數據結構"(Data Structure,縮寫 DS)這個概念里分出一個新概念: 可運行數據結構(Runnable Data Structure,縮寫 RDS)。它相比其他數據結構的最大特點就是具有輸入輸出(至少是具有輸出功能)。可運行數據結構,根據其輸入輸出是否具有記憶性,又可分為函數(function)和狀態機(state machine)兩類,如下圖所示:

圖二:DS、RDS、Function、State Machine

  • 函數(function)的輸出只取決於之前特定時刻的輸入(或者無輸入,只給出特定的輸出),無狀態(記憶)。函數自身只有被調用這種使用方式,調用即是運行。
  • 狀態機(state machine)的輸出則取決於之前特定時刻的輸入和狀態(或者無輸入,根據狀態和時鐘不斷計算出輸出)。狀態機自身則有調用、掛起(就緒)、自動終止、被動終止等使用方式。

其實,如果不把狀態機的語義限定在可運行數據結構這個類別下的話,它還可以是操作系統中的"進程",或者是"進程"中的"線程",又或者是操作系統,乃至計算機(硬體)本身。

一個 RDS 要麼是函數,要麼是狀態機。每一個 RDS 可以包含多個 RDS,也就是可以有嵌套結構。被包含的 RDS 稱為子 RDS,包含這子 RDS 的 RDS 稱為父 RDS。一般來說,父 RDS 便是子 RDS 的運行時上下文。

程序源代碼,即是 RDS 中,便於人類記憶與閱讀的一種。因此,它可以是函數表達、狀態機表達、或者由多個子 RDS 組合而成的表達。它之所以能生效,仰賴於編譯器和編譯的目標環境。我們的目標就是用一種編程語言(源代碼)去適配不同的編譯目標環境,使得對不同的編譯目標環境,該編程語言都能充分地利用該編譯目標環境的資源。

這裡再將 RDS 可以控制的物理硬體稱為可運行器件(Runnable Device,縮寫 RD),將正在運行的可運行數據結構稱為 RDS-IR (Runnable Data Structure In Run,注意 DS 和 RDS 都是可存儲的數據,而 RDS-IR 則是運行中的 RDS 了)。這樣就可以將一個正在運行的 IT 系統展示為 RDS-IR 和 RD 組成的,如下圖所示的組合:

圖三:IT 系統運行中的通用架構圖

從圖中可以看到 ,很多 RD 可以聚在一起組成新 RD,一個 RDS-IR 可以有很多子 RDS-IR,這種嵌套式的結構可以持續許多級。箭頭代表通信鏈路。在物理硬體里,一個子 RD 要和父 RD 以外的 RD 通信,則必須通過父 RD 的通信介面才行。

那麼,一個子 RDS-IR 要和父 RDS-IR 以外的 RDS-IR 通信,是否理應通過父 RDS-IR 的通信介面才行呢?

當我們把整個 IT 系統用這種方式抽象出來之後,好像能隱約地覺察到什麼。但是這種覺察在感覺上還是相當不可靠,也不具體。接下來,將結合編程語言與程序發展的歷史,來具體探究 OOWA 設計時,應當遵循的幾項原則。

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

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

CC BY-NC-SA

下篇:

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

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

阻擋你學會Haskell最大的兩個問題是什麼?
柯里化的前生今世(九):For Great Good
AppleScript類自然語言與非英語語法設計
Python的起源是什麼?

TAG:編程語言 |