I Write Games in C (yes, C)
Hacker News
The author discusses their experience and rationale for developing games using the C programming language, highlighting its suitability for certain types of game development.
Hacker News
The author discusses their experience and rationale for developing games using the C programming language, highlighting its suitability for certain types of game development.
AI 生成摘要
作者討論了他們使用 C 程式語言開發遊戲的經驗和理由,強調其對某些類型遊戲開發的適用性。
這篇討論源於遊戲開發者 Jonathan Whiting 分享他堅持使用 C 語言開發遊戲的心路歷程。在現代遊戲開發普遍擁抱 C++、C# 或高階引擎的背景下,作者對 C 語言簡潔性的偏好引發了 Hacker News 社群對於程式語言選擇、開發效率與團隊協作成本的深度辯論。
針對在現代開發環境中使用 C 語言,社群內部的看法呈現兩極化。支持者認為 C 語言的魅力在於其極致的簡潔與透明,這種「所見即所得」的特性讓開發者能完全掌控程式碼的行為,避免了 C++ 中常見的隱藏路徑或複雜的模板元編程。部分資深開發者指出,C 語言的語法穩定且版本更迭緩慢,這減少了團隊在語法風格上的爭議。此外,C 語言極快的編譯速度被視為一項巨大的生產力優勢,相較於 C++ 動輒數分鐘的編譯時間,C 的即時回饋感對於需要頻繁調整數值的遊戲開發至關重要。
然而,反對意見則集中在協作成本與安全性上。許多評論者指出,C 語言將物件生命週期管理完全交給程式設計師,這在多人協作的大型專案中極易出錯。雖然可以透過 Valgrind 或 AddressSanitizer 等工具在 CI 流程中捕捉記憶體洩漏,但這依然無法彌補 C 語言缺乏現代抽象能力(如智慧指標、向量與映射表)的缺陷。有觀點認為,許多宣稱使用 C 語言的開發者,最終往往會為了實現多型或動態陣列,而在結構體中手動實作虛擬函式表或編寫大量的巨集,這本質上是在「手動模擬」C++ 的功能,卻失去了編譯器的安全檢查。
有趣的爭論點在於「C 語言是否真的適合團隊開發」。有人以 Linux 核心為例,證明 C 語言能支撐數千人的協作;但反駁者認為 Linux 是極少數的特例,且核心開發者正逐漸引入 Rust 以解決 C 語言難以說明的內部 API 契約問題。對於尋求平衡的開發者,社群中出現了「Orthodox C++」的呼聲,即僅使用 C++ 的基本類別與標準庫,捨棄複雜的模板與異常處理,以此獲得 C 的透明度與 C++ 的便利性。同時,如 Odin 和 Zig 等新興語言也被多次提及,被視為 C 語言在現代環境下的理想替代品,既保留了命令式的直觀,又解決了字串處理與記憶體管理的痛點。
最後,關於搜尋引擎的「可發現性」也引發了一段插曲。由於「C」或「Go」這類單字在一般語境中過於常見,開發者在討論時傾向使用「Golang」或提及「Clang」來增加搜尋精準度。這反映出在資訊爆炸的時代,語言命名的簡潔性反而成為了社群交流與資料檢索的一種負擔。
在討論中,參與者推薦了多項實用的工具與替代方案。針對 UI 開發,有人推薦了純 C 語言實作的 UI 框架 Clay,以及廣受好評的 Dear ImGui 的 C 語言封裝版本 CimGUI。在語言選擇上,Odin 語言因其內建的向量支援與對遊戲開發的友善性而獲得高度評價。此外,對於希望改善 C 語言字串處理能力的開發者,antirez 開發的 sds 函式庫被認為是處理長度受限字串的優秀選擇。