天天看點

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

"IT有得聊”是機械工業出版社旗下IT專業資訊和服務平台,緻力于幫助讀者在廣義的IT領域裡,掌握更專業、實用的知識與技能,快速提升職場競争力。

古老”的C++,仍然是目前編寫遊戲時最常用的語言,但是 C 為什麼才是最适合的?

作者 | Jonathan Whiting​

譯者 | 彎月,責編 | 郭芮

以下為譯文:

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

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

01

程式設計語言必須具備的條件

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

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

同樣,我也不想将自己綁定到特定的作業系統,而且理想的話,我希望該語言還可以為遊戲機開發遊戲。是以,我選擇的程式設計語言必須擁有可移植性,這點很重要,而且擁有良好的可移植庫支援。

02

期待程式設計語言具備的條件

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

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

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

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

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

03

其他替代語言

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過于年輕,還能持續發展多久?我不想對此妄加發表評論,畢竟我隻是淺嘗辄止。

看到這裡有人可能會說,這麼挑剔幹脆自己寫一門程式設計語言吧。我很佩服創造出新程式設計語言的人,我自己常常也有這種想法。但我感覺放棄現有的庫支援,并為将來的相容性承擔全部責任,這個擔子有點過重了。而且這也是非常困難的,是以還是回歸現實,我甯願做遊戲,也不願建立新的程式設計語言。

04

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

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

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

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

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

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

繼續閱讀