基礎:機器模型
低階 vs 高階
想像給路有兩種方式。高階:「去圖書館。」低階:「左轉、走 200 公尺、在紅綠燈過馬路、再右轉……」兩種都能帶你到。高階版本信任你自己補上步驟;低階版本把每一步都講明白。程式語言與程式碼也落在同一條尺上,而「階」不過是在量:指令離機器自己的微小步驟有多近,又離人類較大的意圖有多遠。
高階語言(Python、JavaScript、Java)讓你用貼近問題的語彙說出你要什麼——排序這個串列、抓取這個網址——而底下一大套機制會把它變成實際的機器步驟。低階語言(C,以及更底下的組合語言)則要你用貼近 CPU 與記憶體實際作為的方式來表達——把這個值搬到那個位置、把這些暫存器相加。階越低,掌控與細節越多,通常越少有人牽著你的手;階越高,便利與安全越多,通常對機器的直接掌控越少。
這個框架為何重要:它是用來定位一項工具或一段程式碼最有用的單一軸。它能預測你將面對的取捨——速度與掌控,對上便利與安全——也解釋了系統程式設計為何住在偏低階的那一端。不過要小心:「低階」不是貶詞,「高階」也不代表懶惰。它們是不同的工作。真正的本事,是替任務挑對層級,並懂得夠多的低階知識,去理解高階到底在替你做什麼。
要把兩數相加,高階的 C 讓你寫 c = a + b。等價的低階組合語言可能是三行:把 a 載入暫存器、把 b 加進去、把結果存回。效果相同;越低階的層級,把每一個機器步驟都攤了出來。
一行高階程式碼;對應到 CPU 實際執行的好幾個低階步驟。
這些詞是相對的,且隨時間漂移:1970 年代相對於組合語言,C 被稱為「高階」;如今相對於 Python,它卻是教科書上的「低階」語言。永遠要問一句:「低/高,是相對於什麼?」
又称
另见