1956:FORTRAN — Backus 團隊與編譯器的誕生#
案情#
1956 年 11 月,IBM 正式發表 FORTRAN(FORmula TRANslation)提案;由 John Backus 率領約十人團隊在 IBM 位於紐約的總部研發,1957 年 4 月隨 IBM 704 交付第一版編譯器。FORTRAN 是史上第一個被廣泛使用的高階程式語言與優化編譯器,目標只有一個:讓科學家不必再手寫組合語言,寫出來的程式碼還要「夠快」,快到工程師沒有藉口拒絕。
前因#
- 1950 年代的主流是組合語言與機器碼:每行對應一條指令,寫一個方程式求解動輒耗費數週,且換機器就要全部重寫。
- IBM 704 已具備浮點運算硬體與索引暫存器,這給了 Backus 一個論證:「硬體夠快了,瓶頸在人的產能」。
- 當時業界普遍懷疑「自動編程」:編譯器產生的碼一定比手寫慢,是公認的常識。
- Backus 在 1954 年的提案報告中正面迎戰此疑慮,承諾編譯後的碼「效率可達手寫組語的一半到八成」——這被視為瘋狂的承諾。
- 團隊成員包括 Robert Nelson、Irving Ziller、Harlan Herrick、Lois Haibt 等,程式設計師來自各種背景,幾乎無前例可循。
線索與推理#
偵探的關鍵推斷:FORTRAN 的成功不靠語言設計的天才,而靠「編譯器最佳化」這一著險棋。Backus 團隊的決策邏輯是——語言可以簡陋,但效能絕不能輸,因為 1957 年的客戶是科學家與工程師,他們願意學新語法的唯一理由是「算得更快」。因此團隊把心血幾乎全部投在「流程分析(flow analysis)」上:分析迴圈、暫存器配置、公共子運算式消除。1957 年版 FORTRAN 編譯器花了 18 個人年,編譯本身要耗用 704 上的大量機時,但產出的碼經常逼近甚至追平手寫組語。
另一條線索是「承諾的可信度」:Backus 沒有吹性能,而是公布實測。1957 年交付時的說明書明列編譯器最佳化的機制,這種以數據立信的做法,成為之後軟體工程文化的雛形。偵探還注意到一個隱藏動機:Backus 自己在自傳中承認,最初動機之一是「懶得再寫組語」——懶惰,正是軟體抽象層一次次升級的原動力。
理論#
FORTRAN 的核心數學命題是:高階碼的效能損耗可以被編譯器壓縮到趨近於零。以矩陣運算為例:
FORTRAN 77 片段:
DO 10 I = 1, N
DO 10 J = 1, N
C(I,J) = 0.0
DO 10 K = 1, N
10 C(I,J) = C(I,J) + A(I,K) * B(K,J)
其浮點運算量為 \(2N^3\) 次,編譯器需將內層迴圈優化至接近硬體上限。若組語手寫耗時 \(T_{asm}\) 、編譯器產出耗時 \(T_{fort}\) 、開發人時各為 \(t_{asm}, t_{fort}\) ,則 FORTRAN 的經濟優勢為:
亦即:機器時間小幅讓步,人力時間數量級節省。1958 年 FORTRAN II 加入副程式與連結,之後 FORTRAN IV、77、90 一路演進至今。Backus 團隊隨後在 1958–1960 年發展 BNF 正規文法(Backus–Naur Form),奠定語言理論基礎。
後果#
- FORTRAN 迅速成為科學計算的通用語,直到今日 HPC 領域的數值程式庫(如 BLAS、氣候模式)仍有 FORTRAN 血統。
- 「編譯器最佳化」成為獨立學科,催生 1960 年代 ALGOL、COBOL 與編譯理論。
- IBM 704/709 的科學市場因此站穩,為 1964 年 System/360 的軟體相容策略鋪路。
- Backus 1977 年獲圖靈獎,演講中反思 FORTRAN 的局限,轉而倡導函數式編程——本案的偵探,晚年成了新的嫌疑犯。
冷案檔案#
- 時間:1954 提案、1956 發表、1957 年 4 月首版交付
- 案由:首個量產高階語言與優化編譯器,證明「寫程式」可以不必寫組語
- 歷史定位:軟體產業的創世紀——人機之間的第一座正式翻譯橋