基本計算單位的歷史轉換:從指令、函數到張量、意圖與世界狀態
摘要
程式語言史通常以語法、範式與抽象層級描述其演進,但更深層的變化往往發生在「基本計算單位」上:一種語言究竟把什麼視為最自然、最直接、最先被操作的計算對象。機器碼以指令與位元為基本單位,程序式語言以命令序列與記憶體狀態為基本單位,函數式語言以函數與值轉換為基本單位,物件導向語言以封裝實體與訊息傳遞為基本單位,邏輯式語言以關係與推導為基本單位,陣列與張量語言則將整體資料結構及其算子提升為核心。進入 AI、Agent、自然語言介面與世界模型時代後,意圖、能力、驗證條件、事件與世界狀態開始成為新的候選基本單位。
本文提出「基本計算單位轉換論」,主張重大語言革命並非僅由新語法造成,而是由計算單位、組合規則、狀態模型與控制權配置的聯合轉換造成。本文建立基本計算單位的形式化定義,區分表面單位、語義單位、執行單位與治理單位,並提出由指令、程序、函數、物件、關係、陣列、張量、事件、Agent、意圖到世界狀態的歷史序列。最後,本文將 EML、NOVA 與格子語言置入此演化鏈,說明 EML 處理意圖與語義單位,NOVA 處理張量—算子單位,格子語言則處理區域、邊界、端口與耦合單位,三者共同構成後文本程式系統的基本計算單位堆疊。
關鍵詞: 程式語言史、基本計算單位、函數式程式設計、物件導向、張量語言、Agent、意圖程式、世界狀態
一、問題的提出
當人們比較不同程式語言時,最常見的問題是:語法是否簡潔、型別是否安全、執行是否快速、是否支援物件導向、函數式或並行計算。然而,這些問題雖然重要,卻不一定觸及語言最深層的設計選擇。
更根本的問題是:
一種語言認為「一次自然的計算」是什麼?
對組合語言而言,一次自然計算可能是一條暫存器指令;對 C 語言而言,可能是一個敘述對記憶體狀態的修改;對 Lisp 或 Haskell 而言,可能是一個表達式的求值或函數的組合;對 Smalltalk 而言,可能是一個物件接收訊息;對 Prolog 而言,可能是一個關係查詢與推導;對 APL 而言,可能是作用於整個陣列的算子;對現代深度學習框架而言,則往往是張量圖上的算子傳播與微分。
因此,語言設計的差異不只在於「同一計算如何被寫出」,更在於「什麼被視為計算本身」。
若一種語言只是把既有指令換成更簡短的符號,它主要發生表面變化;若它把原本需要大量迴圈與索引控制的操作,提升為單一陣列算子,則它已改變認知與語義單位;若它把人類意圖、執行能力與驗證條件封裝為可運行結構,則它可能正在形成新的程式本體。
本文將這種變化稱為:
其核心不是單一資料型別的增加,而是語言整體對下列問題的重新回答:
- 哪些對象是一級公民?
- 哪些操作可以直接作用於整體?
- 什麼結構可以被組合?
- 誰決定執行細節?
- 什麼結果被視為完成一次計算?
- 哪些條件決定計算是否合法?
二、基本計算單位的形式化定義
令程式語言為:
在此基礎上,定義語言的基本計算單位為:
其中:
- :表面單位,使用者直接書寫或操作的最小結構;
- :語義單位,語言賦予獨立意義的核心結構;
- :執行單位,運行時實際調度、求值或傳播的單位;
- :組合單位,可被封裝、重用與連接的結構;
- :治理單位,可被授權、限制、驗證、追蹤與撤回的結構。
在早期語言中,這些單位經常高度重合。例如,一條機器指令同時是表面單位、語義單位與執行單位。但隨著語言抽象化,它們逐漸分離。
例如,在高階語言中,一個函數是表面與組合單位,但執行時可能被拆成多個基本區塊;在 AI Agent 系統中,一段自然語言意圖可能是表面單位,但真正的執行單位可能是工具呼叫、狀態機節點與驗證步驟。
因此,不能只看使用者「寫了什麼」,就判斷語言真正的基本計算單位。更完整的判斷應是:
其中 表示在語言中最能決定組合方式、控制權與合法性的核心交集。
三、第一階段:位元、地址與機器指令
最早期的程式語言幾乎直接對應硬體。其基本計算單位包括:
- 位元;
- 機器字;
- 記憶體地址;
- 暫存器;
- 跳躍;
- 算術與邏輯指令。
一次計算可表示為:
其中 是記憶體狀態, 是暫存器狀態, 是單一機器指令。
此時,程式設計者需要直接管理:
- 資料位於何處;
- 哪個暫存器保存何值;
- 指令以何種順序執行;
- 控制流如何跳躍;
- 硬體限制如何影響運算。
這種語言的優點是控制精確、與硬體距離近;缺點則是人類意圖與機器操作之間的距離極大。
可以將這個階段描述為:
一個簡單的人類目的,需要被展開成大量細粒度操作。
四、第二階段:敘述、程序與可變狀態
高階程序式語言將基本計算單位由單一機器指令提升為:
- 敘述;
- 表達式;
- 變數;
- 程序;
- 控制結構。
其典型模型是:
其中 是程式狀態, 是命令或敘述。
此階段的重要創新,不只是出現 if、while 與函數呼叫,而是把「修改抽象狀態」提升為人類可直接操控的單位。程式設計者不再必須指定每一條機器指令,而是指定狀態如何轉換。
程序式語言的基本直覺可寫成:
這套模型非常成功,因為它與物理世界中的步驟、流程與因果直覺相容。然而,它也使程式設計者容易把「計算」理解為一連串局部修改,進而造成共享狀態、並行競爭與副作用管理等問題。
五、第三階段:函數、值與組合
函數式語言將基本計算單位由命令與狀態轉換,推向函數與值之間的映射:
一次計算不再首先被理解為「修改某個位置」,而是「將一個值轉換成另一個值」。程式則可被視為函數的組合:
這種轉換帶來數個深層變化:
- 計算單位由步驟轉向映射;
- 組合單位由程序區塊轉向函數;
- 合法性由控制流正確性部分轉向型別與代數結構;
- 副作用被限制、隔離或顯式化;
- 程式更容易被推理、重寫與平行化。
函數式語言並不表示機器不再修改狀態,而是把狀態修改從主要表面退到受控制的位置。這說明基本計算單位不是硬體執行事實,而是語言選擇讓使用者首先看見和操控的結構。
六、第四階段:物件、訊息與持續身份
物件導向語言將基本計算單位轉向具有狀態、行為與身份的封裝實體:
其中 是身份, 是狀態, 是行為集合。
計算常被描述為物件之間的訊息傳遞:
物件導向的重要性不只在於類別和繼承,而在於它將「持續存在的實體」提升為程式組織單位。這與程序式語言有本質差異:程序式語言傾向把資料與操作分離,物件導向則試圖將它們重新封裝。
其基本直覺是:
此模型特別適合 GUI、模擬、遊戲、企業系統與複雜領域建模,因為人類容易用實體、責任與互動理解世界。
但物件也可能變成過度普遍的抽象,導致所有問題都被迫表達為物件層級。這再次顯示:基本計算單位既提供能力,也構成認知限制。
七、第五階段:關係、規則與推導
邏輯式語言將基本計算單位轉為:
- 事實;
- 關係;
- 規則;
- 查詢;
- 證明或求解。
其典型結構是:
其中 是事實集合, 是規則集合, 是查詢或命題。
在這種模型中,使用者不必直接指定所有執行步驟,而是描述何種關係成立,再由推導機制尋找答案。控制權因此由程式設計者部分轉移給求解器。
這是一個關鍵歷史節點:
邏輯式與宣告式語言證明,程式的基本單位不必是動作,也可以是約束與關係。SQL 亦可被置於相近譜系:使用者描述需要的資料集合,由查詢最佳化器決定具體執行計畫。
八、第六階段:集合、陣列與整體運算
陣列語言將基本計算單位由單一標量操作提升為整體資料結構上的變換:
算子直接作用於整個陣列:
這種語言革命的重要性在於,它改變了程式設計者思考問題的尺度。傳統程序式寫法往往要求:
- 建立迴圈;
- 管理索引;
- 逐項讀取;
- 逐項運算;
- 寫回結果。
陣列語言則將整體轉換表達為單一語義操作。索引、迭代與部分最佳化被交給語言系統。
可以把這種差異寫成:
左側以局部操作組成整體,右側則直接把整體當作基本對象。
因此,陣列語言的核心不是符號怪異或簡短,而是整體性。
九、第七階段:張量、形狀、算子與可微分程式
在現代科學計算與機器學習中,陣列進一步演化為張量。張量語言的基本單位不只是多維資料,而包括:
- 張量;
- 形狀;
- 維度;
- 軸;
- 廣播規則;
- 算子;
- 計算圖;
- 梯度;
- 裝置與分片。
可將張量表示為:
算子則必須同時處理值與形狀:
其中 表示形狀、軸與裝置等結構約束。
更進一步,可微分程式將導數從外部分析工具提升為語言運行機制:
同時生成:
此時,程式不只計算結果,也能生成自身局部變化規律。
這正是 NOVA 應介入的位置。若 NOVA 只是提供較短的矩陣語法,它仍停留在表面創新;若它將形狀型別、算子組合、微分、裝置映射與張量拓撲納入權威語義,才真正形成張量—算子原生語言。
十、第八階段:事件、資料流與反應式變化
當計算系統不再只處理一次性輸入輸出,而需要持續回應環境,事件與資料流便成為基本計算單位。
事件可表示為:
其中 是時間, 是負載, 是上下文。
資料流程式則可表示為圖:
節點 是轉換算子,邊 是資料或事件傳播通道。
反應式語言的基本直覺是:
這使程式由「被呼叫後完成」轉為「持續存在並保持更新」。GUI、感測器網路、串流處理、即時系統與互動世界皆依賴此模型。
當事件成為基本單位後,時間不再只是指令順序,而成為語義的一部分。延遲、順序、同步、窗口與回放,都需要被語言明確處理。
十一、第九階段:Agent、能力與行動閉環
Agent 系統使基本計算單位由函數或工作流進一步轉向具有目標、狀態、能力與回饋的行動主體。
可將 Agent 表示為:
其中:
- :信念或觀測狀態;
- :記憶;
- :可用能力與工具;
- :規劃或決策機制;
- :驗證與停止條件。
Agent 的基本循環為:
與函數不同,Agent 不必一次完成固定映射;與物件不同,Agent 不只被動接收訊息,而會根據目標主動選擇行動;與工作流不同,Agent 可以在執行中重新規劃。
因此,Agent 原生語言至少需要把下列結構提升為一級對象:
- 目標;
- 能力;
- 權限;
- 計畫;
- 記憶;
- 觀測;
- 驗證;
- 中止與回復。
僅僅讓大型模型呼叫函式,尚不足以形成 Agent 語言。真正的 Agent 語言必須使上述結構可被組合、限制、檢查與治理。
十二、第十階段:意圖、規格與驗證對偶
自然語言介面使「意圖」成為新的候選基本單位,但意圖本身通常不夠精確。若直接將模糊意圖視為程式,系統容易產生語義漂移。
因此,意圖原生語言不能只包含意圖,還必須包含其形式對偶:規格與驗證。
可將一個意圖單位表示為:
其中:
- :目標;
- :約束;
- :允許資源;
- :驗證條件。
意圖的轉譯鏈為:
其中:
- :規格;
- :可執行計畫;
- :結果;
- :驗證程序。
這表示意圖語言的真正基本單位不是一句自然語言,而是:
EML 可被定位在這個階段。它的核心任務不是讓自然語言直接獲得不受限制的執行權,而是將高層語義轉為可檢查的中介結構,使意圖、規格、程式與結果之間保持可追溯關係。
十三、第十一階段:世界狀態、區域與世界線
當程式開始直接操作模擬世界、數位孿生、機器人環境或計算宇宙時,最自然的基本單位可能不再是函數、物件或 Agent,而是世界狀態本身。
令世界狀態為:
其中:
- :實體與變數;
- :關係結構;
- :局部規則與約束;
- :歷史、版本與因果記錄。
程式則成為世界狀態轉換:
若系統允許多個候選演化,則可表示為:
此時,分支、模擬、回滾、反事實與世界線比較都成為程式語義的一部分。
在這個階段,區域也可能成為基本單位。令一個程式區域為:
其中:
- :邊界;
- :權限;
- :輸入端口;
- :輸出端口;
- :內部規則與投影。
格子語言可在此發揮作用。格子不只是圖形介面,而可作為世界或程式中的局部區域單位,使選域、封裝、連接、權限與狀態顯影成為直接操作。
十四、基本計算單位的歷史序列
綜合前述,可得到一條近似演化鏈:
這不是單線替代史。新單位通常不會消滅舊單位,而是將其包入更高層結構。
例如:
- 張量算子最終仍由機器指令執行;
- Agent 仍會呼叫函數;
- 世界狀態仍由資料結構表示;
- 意圖仍需要被編譯成程序與操作。
因此,更準確的模型是巢狀堆疊:
高層單位壓縮並治理低層單位,而不是使低層單位消失。
十五、計算單位轉換的判準
不是每一種新資料型別或語法結構都構成基本計算單位轉換。本文提出五項判準。
15.1 一級公民判準
該單位是否能被直接命名、傳遞、組合、儲存與返回?
15.2 原生運算判準
語言是否提供直接作用於該單位的核心算子,而非完全依賴函式庫模擬?
15.3 合法性判準
型別系統、編譯器或運行時是否理解該單位的內部約束?
15.4 控制權判準
引入該單位後,是否改變人類、編譯器、運行時或 AI 之間的控制權分配?
15.5 認知壓縮判準
該單位是否能將原本大量低層步驟壓縮為一個可理解、可驗證的高層操作?
若一個候選單位同時滿足多項判準,就較可能代表真正的語言形態轉換。
可定義近似轉換分數:
其中 表示候選單位在各判準上的滿足程度, 為權重。
此分數不是為了宣稱客觀排名,而是避免僅憑新名稱就將既有結構包裝成新範式。
十六、認知壓縮與治理成本
基本計算單位的提升通常能降低人類描述成本。令一個任務 在低層語言中的描述長度為 ,在高層單位中的描述長度為 ,則認知壓縮率可寫為:
但壓縮不是無成本的。高層單位會引入推導、最佳化、驗證與治理負擔。令:
則語言設計不能只最大化認知壓縮,也要控制治理成本。
可以定義淨效益:
其中 是語義不透明、不可重現或權限失控的風險。
例如,自然語言意圖具有極高壓縮率,但若缺乏規格與驗證,其 也可能極高。這就是為什麼「一句話完成任務」不能單獨作為先進語言的充分條件。
十七、EML、NOVA 與格子語言的單位堆疊
依照本文框架,可以將三者重新整理為互補的基本計算單位層。
17.1 EML:意圖—語義—規格單位
EML 的候選基本單位為:
其中:
- :意圖;
- :規範語義;
- :驗證條件;
- :可追溯轉譯記錄。
EML 的目標不是消滅程式碼,而是使高層語義成為可組合與可驗證的一級對象。
17.2 NOVA:張量—形狀—算子單位
NOVA 的候選基本單位為:
其中:
- :張量;
- :形狀與維度;
- :算子;
- :微分結構;
- :裝置與分布映射。
NOVA 的價值在於將這些原本分散於函式庫、編譯器與運行時的結構統一為權威語義。
17.3 格子語言:區域—邊界—端口—耦合單位
格子語言的候選基本單位為:
其中:
- :區域;
- :邊界;
- :輸入端口;
- :輸出端口;
- :耦合關係;
- :投影集合。
格子語言使「選取一個區域並重新封裝」成為直接操作,而不是依賴文字檔案、類別或模組的固定邊界。
三者可形成如下堆疊:
更精確地說,它們也可以共享同一權威中介表示,從不同方向進行操作,而不是形成僵硬的單向編譯鏈。
十八、基本計算單位的設計原則
18.1 高層單位必須可降解
任何高層單位都應能被降解為較低層、可檢查的結構:
否則它容易成為不可解釋的黑箱。
18.2 低層細節不應無條件上浮
抽象的目的在於壓縮不必要細節。若每次使用高層單位都必須重新管理所有低層操作,該單位就沒有完成真正抽象。
18.3 單位必須攜帶合法性
張量應攜帶形狀約束,Agent 應攜帶權限,意圖應攜帶驗證條件,世界狀態轉換應攜帶不變量。
18.4 單位應支援局部組合
一個好的基本單位應能在局部被理解、測試與替換,而不要求重建整個系統。
18.5 控制權與責任必須對稱
若某個單位能自主決定更多執行細節,就必須提供更強的觀測、驗證、中止與追蹤機制。
18.6 多重投影不能破壞單位同一性
同一個基本單位可以有文字、圖形、格子與自然語言投影,但這些投影必須指向同一權威結構:
而不是形成彼此不同步的多份程式。
十九、結論
本文提出「基本計算單位轉換論」,主張程式語言史的深層演化,並非單純由語法、關鍵字或單一範式更替構成,而是由語言對「什麼是一次自然計算」的重新定義構成。
從位元、指令、敘述、程序、函數、物件、關係,到陣列、張量、事件、Agent、意圖與世界狀態,每一次主要轉換都同時改變了:
- 一級對象;
- 組合方法;
- 控制權分配;
- 狀態與時間模型;
- 合法性與驗證方式;
- 人類理解程式的認知尺度。
高層計算單位不會讓低層單位消失,而是將它們壓縮、編排與治理。真正的語言創新,不在於替舊結構換上新名稱,而在於讓新的單位具備原生算子、合法性規則、組合能力、執行地位與治理邊界。
在此框架下,EML、NOVA 與格子語言具有清楚的互補定位:EML 使意圖、語義與規格成為可組合單位;NOVA 使張量、形狀、算子與微分成為權威單位;格子語言使區域、邊界、端口、耦合與投影成為直接可操作單位。三者共同指向一種後文本程式系統:程式不再只是線性原始碼,而是一組可被人類、AI、編譯器與世界共同維護的多層計算單位。
因此,未來程式語言設計的核心問題,將不再只是「應該使用什麼語法」,而是:
我們希望人類直接操控哪一層現實,而哪些細節應交由語言、AI 與運行環境共同完成?