這篇文章寫於 1999 年 11 月,彼時 DOS 遊戲開發如日中天。雖然平台已逝,但文中關於**性能極致追求、工程權衡、底層思維**的核心觀點,放在現代高性能計算、嵌入式開發、遊戲引擎研發中,**依然閃耀著真理的光芒**。
Watcom C/C++ 32 位保護模式 + DOS/4GW 是當時王者。今日映照:**為熱點路徑選擇最接近硬件的語言 (C/C++/Rust/Assembly),業務邏輯用高級語言** — — 混合編程是永恆真理。
「通用意味著慢」。**為當前具體問題寫最專用的代碼**,拒絕過度設計。現代術語:**YAGNI (You Aren't Gonna Need It)** + **Data-Oriented Design**。
VGA 70Hz 刷新率,雙緩衝消隱。留給邏輯的時間 < 14ms/幂。今日映照:**預算驅動架構**,Profile-Guided Optimization。
**「搬數據」是計算機本質**。數據結構、內存佈局、訪問模式決定性能上限。現代術語:**Engine Architecture First**。
// 1999 代碼:計算屏幕偏移 = width * y + x
int count_offest(int _width, int x, int y) {
int mode[17] = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536};
int i, offest = 0;
for (i=16; i>=0; i--) {
if (_width >= mode[i]) {
offest += (y << i); // 移位代替乘法
_width -= mode[i];
if (_width < 1) break;
}
}
return offest + x;
}
今日映照:**整數運算優於浮點,編譯器優化不如算法重寫**,SIMD 內聯函數是現代移位乘法。
PCX/BMP 讀寫器是必備基建。今日映照:**Asset Pipeline 自動化、Texture Atlas、GPU 友好格式 (KTX/ASTC)**。
無乘法、分辨率自適應的 `point(x,y,color)`。今日映照:**像素著色器、Compute Shader、光柵化器**的核心邏輯同源。
「每個點少處理一次,你至少能多跳一圈舞」。今日映照:**Alpha Blending 硬件加速、Alpha Test、Alpha To Coverage** — — 算法思想未變,執行單元變了。
void wait(void) { // 等待垂直回描
while (inp(0x3DA) & 0x08);
while (!(inp(0x3DA) & 0x08));
}
今日映照:**`glfwSwapInterval(1)` / `Present(1)` / `VK_PRESENT_MODE_FIFO_KHR`** — — 同步顯示器刷新率是跨時代共識。
背景、精靈、鼠標、鍵盤 — — 全在一幂搞定。今日映照:**Game Loop 固定時間步、系統解耦、ECS 架構**。
「不要用編譯器優化,除非想用戶跑不動」。今日映照:**手工優化關鍵熱點,PGO 輔助,`-O3` 不是萬能藥**。
// 從
*(Video+k) = *(p[1]+j); k++;
// 到
*(Video+(k++)) = *(*(p+1)+j); // 減少讀內存、數組轉指針開銷
// 再到:循環展開 10 次,寄存器緩存基址,合併存儲
今日映照:**編譯器輸出檢查 (Godbolt)、內聯汇編、SIMD 向量化、內存訪問模式優化 (SoA vs AoS)**。
今日映照:**分支預測友好寫法、條件移動指令 (CMOV)、無分支編程**。
今日映照:**編譯器警告 `-Wparentheses`、靜態分析 (Clang-Tidy/Cppcheck)、單元測試覆蓋**。
void _interrupt Timer() { timer_program(); timer_counter++; Old_Time_Isr(); }
void install_timer(int Hz) { /* 重編程 8253 芯片 */ }
今日映照:**高精度定時器 (HPET)、`timerfd`、`setitimer`、遊戲循環固定步長累加器**。
今日映照:**Raw Input API、高 DPI 感知、自定義游標渲染** — — 從不信任系統預設行為。
今日映照:**`WM_INPUT` / `libinput` / `SDL_Event` — — 繞過系統消息泵獲取原始輸入**。
今日映照:**結構化日誌 (spdlog/glog)、分布式追蹤 (Jaeger)、Metrics (Prometheus)** — — 可觀測性是系統內建屬性。
今日映照:**開發者體驗 (DX)、心理健康、可持續交付** — — 人是核心資產。
肖舸 1999.11.1 於《DOS遊戲編程二十一條》。二十二載光陰,鐵律未銹。願每位追求極致的工程師,都能在自己的時代裡,聽見這聲音的回響。