爲什麼我選擇用 C 編寫遊戲?

編譯:CSDN- 彎月,作者:Jonathan Whiting

我喜歡走不尋常路。最近我所有的個人項目遊戲都是利用 “最普通” 的 C 語言編寫的。所以,我覺得有必要解釋一下爲什麼我選擇用 C 編寫遊戲。

下面讓我們來談一談有關編程語言的見解,我警告你這些內容可能有點枯燥。

編程語言必須具備的條件

有些事情是沒有商量的餘地的。首先,這種語言必須可靠。我可不願花時間去處理那些不是我自己造成的錯誤。

我的許多遊戲都是用 Flash 編寫的,現在 Flash 快要死了。我不想花時間將舊遊戲移植到新平臺,我想製作新遊戲。我需要一個可以在很長一段時間都保持穩定的平臺。

同樣,我也不想將自己綁定到特定的操作系統,而且理想的話,我希望該語言還可以爲遊戲機開發遊戲。因此,我選擇的編程語言必須擁有可移植性,這點很重要,而且擁有良好的可移植庫支持。

期待編程語言具備的條件

雖然不是必須條件,但我最想要的首先是簡單性。我感覺查找語言功能和稀奇古怪的 “聰明” API 極其令人厭煩。我希望我可以記住這種理想的編程語言,而且再也不必查找任何東西。

處理 Bug 會消耗大量腦細胞。我希望產生的 bug 越少越好,所以我希望這種語言能嚴格檢查拼寫,強烈的警告消息和靜態代碼分析。我希望很輕鬆就能發現 bug,所以我想要良好的調試器和動態分析。

我對實現高清並不感興趣,但我卻十分在意性能。節省下更多的 CPU 時鐘週期,意味着你有更多的餘地去嘗試別的東西。如果你不追求高分辨率,那麼探索現代功能強大的計算機的潛力會非常有趣。

此外,我更加關心編譯器的速度。我不是禪宗大師,對我來說等待 10 秒鐘以上就是浪費時間,而且更重要的是,這會打亂我的節奏,我會情不自禁打開 Twitter,一晃眼 5 分鐘就過去了。

我並不熱衷於面向對象。我一生的大部分時間都在處理類和對象,但是花的時間越多,就越不明白爲什麼要如此嚴格地結合代碼和數據。我想單獨處理數據,然後再編寫最符合特定情況的代碼。

其他替代語言

C++ 仍然是當前編寫遊戲時最常用的語言,這並非沒有道理。幾乎我所有的簽約工作中都使用了 C++。但我非常不喜歡 C++。

C++ 可以滿足必備的條件,但是嚴重不符合我所期望的一些條件。C++ 極其複雜。儘管 C++ 有很多優秀的工具,但很容易製造出隱匿的 bug。與 C 相比,C++ 的編譯速度也較慢。雖然 C++ 的性能很好,而且還提供了 C 所沒有的功能,但這些都不是我想要的功能,而且因此付出的代價是高度的複雜性。

C# 和 Java 也有類似的問題。這兩種語言都非常冗長且複雜,我想尋找一種簡潔明瞭的編程語言。C# 和 Java 都是面向對象的風格,而我卻非常不喜歡面向對象。與大多數高級語言一樣,這兩種語言都傾向於隱藏複雜性,但實際上並不能減輕複雜性給我帶來的困擾。

我很喜歡 Go,這種語言的很多方面都繼承了 C,而且還考慮到了自發布以來多年積攢的經驗。我喜歡使用 Go,但是 Go 也有一個重大問題。對編寫遊戲來說,“暫停一切” 的垃圾回收是一個巨大的痛苦, “暫停一切” 是我無法忍受的。此外,Go 對遊戲的庫支持非常差,儘管你可以通過包裝 C 庫來解決這個問題,但是這樣做會增加很多工作量。而且 Go 的定位讓我對其長期的發展充滿了擔憂。

Go 語言用來製作 Web 的東西也不錯,但是感覺 Go 語言發展得太快。我真怕它像 flash 那樣死掉了。此外,我真的不喜歡 javascript,它太過於寬鬆,看到人們利用 javascript 編寫大量軟件,我由衷地感到驚訝。我自己沒有興趣嘗試。

感覺 Haxe 比其他編程語言更有前途。如果再做 Web 開發的話,我可能會深入研究一番。這種語言也有一些很好的庫支持。但我擔心 Haxe 過於年輕,還能持續發展多久?我不想對此妄加發表評論,畢竟我只是淺嘗輒止。

看到這裏有人可能會說,這麼挑剔乾脆自己寫一門編程語言吧。我很佩服創造出新編程語言的人,我自己常常也有這種想法。但我感覺放棄現有的庫支持,併爲將來的兼容性承擔全部責任,這個擔子有點過重了。而且這也是非常困難的,所以還是迴歸現實,我寧願做遊戲,也不願創建新的編程語言。

爲什麼 C 仍然是我的最佳選擇?

C 很危險,但是很可靠。C 就像一把鋒利的刀,雖然有可能會劃破手指,但也可以切菜,而且 C 非常簡單,學會謹慎使用也非難事。

C 的速度非常快,我想不出還有什麼比 C 的編譯更快的編程語言。

C 幾乎可以在所有環境中運行,而且通常都比較容易。很難想象無法運行 C 的情況。

C 擁有強大且持續的庫和工具。

雖然說這話的時候,我略感悲傷,但 C 仍然是我的首選語言。

我絕不是想鼓動每個人都來使用 C。我在本文中所做的推薦針對非常具體且不尋常的情況。我已經編寫了大量非常 “普通” 的 C 代碼,而且我感覺使用 C 語言的時候最舒適。

以上,感謝閱讀。

原文:https://jonathanwhiting.com/writing/blog/games_in_c/

圖文:土筍凍

排版:土筍凍

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/zElg_Ru175HeZMpveq9CeQ