基礎:計算機是什麼

抽象層(layers of abstraction)

你開車時轉動方向盤、踩踏板;你不會去想活塞如何點火、噴油嘴如何計時。每一層都藏起下一層雜亂的細節,給你一個更簡單的把手。電腦正是由這樣一疊高高的層所構成,而學會在某一層工作而不被其他層淹沒,是整個領域裡最重要的生存技能。

由上到下,這疊大致是:你使用的應用程式,用 Python 或 C 之類的高階語言寫成;編譯器把它翻成組合語言;組譯器再把組合語言變成由 ISA 定義的機器碼(原始位元)。ISA 是硬體兌現的契約。它之下,微架構用邏輯閘來實作這份契約,而邏輯閘本身又由電晶體——微小的電子開關——所構成。每一層都向上一層提供乾淨的介面,並藏起自己內部如何運作。

抽象正是讓人類有可能打造並理解電腦的東西。網頁程式設計師不必懂電晶體;晶片設計師不必讀你的網頁 app。每個人都能專注於自己的那一層,信任底下的介面。誠實的提醒是:抽象會滲漏。某一層隱藏的細節有時會滲透上來咬你一口——你看不見的快取行為可能讓程式莫名變慢,而優秀的工程師知道何時該往下偷看一層。

像 total = total + price 這樣一行,要爬完整疊堆疊:高階語言,再到組合語言的 add,再到機器碼位元,由微架構執行,跑在邏輯閘上,由電晶體開關。每一層都為下一層做翻譯。

一條敘述,多個層次,每一層都藏起底下那一層。

抽象很強大,卻不完美——它會滲漏。效能尤其是底層(快取、分支預測)顯露出來的地方,這正是值得學習計算機結構的原因。

又称
levels of abstractionthe abstraction stack抽象階層