一款使用 C 語言和 Win32 API 構建的簡單 Windows 待辦事項應用程式引發了關於二進位制大小最佳化、現代 GUI 開發實踐和 Windows 程式設計演變的廣泛技術討論。據評論稱,這個被其建立者描述為現代的應用程式大小為 278KB,儘管許多開發者對於這種相對基礎功能集的檔案大小表示驚訝。
這款待辦事項應用展示了使用 Win32 API 進行 Windows GUI 程式設計的核心技術,無需任何框架或現代 UI 庫。它包括建立、編輯和刪除待辦事項、標記任務為已完成、在 AppData 中持久儲存、系統托盤整合以及自動啟動選項等功能。
二進位制大小最佳化
該專案最受討論的方面之一是其二進位制大小。許多評論者對可執行檔案達到 278KB 表示驚訝,認為類似功能可以用更小的體積實現。一些開發者提供了可以顯著減小檔案大小的最佳化技術。
「我嘗試複製這個二進位制檔案,看看 278KB 的空間都用在哪裡... 使用 x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z 作為工具鏈。這產生了一個 102KB 的 .exe 檔案。一開始我們就比聲稱的 278KB 好多了... 我們可以透過向 GCC 傳遞一些開關來改進... gcc -s -Oz -flto => 47KB」
討論揭示,二進位制檔案膨脹很大程度上可能來自於靜態連結 C 執行時庫。開發者們辯論了靜態連結與動態連結的優缺點,有些人指出,雖然動態連結產生的可執行檔案更小,但除非這些 DLL 已經是作業系統的一部分,否則需要隨應用程式一起分發 DLL。
二進位制大小最佳化技術
- 用於大小最佳化的編譯器標誌:
-Os
- 針對大小進行最佳化-Oz
- 更激進的大小最佳化-flto
- 連結時最佳化-s
- 剝離符號表
- 連結選項:
- 動態連結到系統 DLL 與靜態連結對比
- 使用 MinGW 預設的 MSVCRT.DLL 作為 C 執行時
- 可執行檔案壓縮:
- 提到 UPX 作為歷史技術(並註明了防病毒軟體的顧慮)
專案功能
- 使用純 C 語言和 Win32 API 編寫
- 待辦事項管理(建立、編輯、刪除、標記完成)
- 在 %APPDATA%\TodoApp\todos.dat 中持久儲存
- 系統托盤整合
- 隨 Windows 自啟動選項
- 最多支援100個待辦事項
現代 Windows 開發實踐
許多評論者質疑該應用程式聲稱的現代特性,指出它缺乏高 DPI 支援、現代 UI 樣式和控制元件之間的 Tab 鍵導航等功能。一些人建議新增 Windows 應用程式清單以啟用現代 UI 樣式和其他當代 Windows 功能。
討論突顯了 Windows 開發實踐如何隨時間演變。雖然 C 語言的 Win32 API 程式設計曾經是標準方法,但到了 Windows 95 時代,大多數 Windows 開發者已轉向更高階的框架和語言,如 C++、Visual Basic 和 Delphi。如今,即使是 Microsoft 自己的文件也推薦使用 C++ 而非 C 進行 Windows 開發。
懷舊情緒和學習價值
儘管有批評,許多評論者表達了對該專案教育價值和懷舊吸引力的讚賞。幾位開發者回憶起他們早期使用類似方法進行 Windows 程式設計的經歷,指出這種開發風格有助於程式設計師理解底層運作原理。
該專案引發了關於幾十年來開發實踐演變的討論,年長的開發者回憶起可執行檔案大小以千位元組而非兆位元組計算的時代。一些人幽默地將這個 278KB 的應用程式與為資源更為有限的系統(如 6502 處理器)程式設計的限制進行了比較。
該專案表明,雖然現代開發實踐已轉向更高階的抽象和更大的二進位制檔案,但理解作業系統 API 和高效程式設計的基礎知識仍然很有價值。對於希望學習 Windows GUI 程式設計的初學者或想要重溫基礎知識的經驗豐富的開發者來說,像這樣的專案提供了一個易於理解 Windows 應用程式如何在較低層次工作的入口點。