為什麼我要用 C 來開發遊戲?

小謝發表於2016-03-17

我是一個另類的開發者。我最近完成的所有的個人遊戲專案都是用 ‘vanilla’C(標準C,即ANSI C)開發的,沒有人會這樣做。所以我想大家會比較感興趣我這樣做的原因。

警告:接下來是對程式語言的枯燥評價。

我需要的開發語言是什麼樣的?

有些要求是沒有商量餘地的。首先,它必須是可靠的。我不能接受把時間浪費在處理那些不是我引起的bug上。

過去我開發的很多遊戲都是基於flash的,現在flash技術已經離壽終正寢不遠了。我不想花費時間將老遊戲移植到新的平臺上,我想開發新的遊戲。我需要找一個我有信心它能存在很長一段時間的平臺。

同樣我不希望把自己繫結在一個特定的作業系統上,我理想 的作業系統最好有開發主機遊戲的選項。所以程式語言的可移植性對我來說非常重要,並且它最好具有良好可移植庫的支援。

我想要的開發語言是什麼樣子的?

我所強烈渴望的是簡單,但這不是必須的選項。我發現查詢語言特性和一些古怪“聰明的”API是一件相當累的事情。我理想中的語言應該是我可以記住它所有的特性和API,然後再也不用特意去查詢它。

處理BUG也是一件特別耗時耗力的事情。我想要更少的BUG,所以我需要嚴格的拼寫檢查、強大的警告資訊和靜態程式碼分析。我希望BUG更容易被發現,所以我需要好的偵錯程式和動態分析器。

雖然我不是一個極度現實主義者,但是我仍然關心效能。這樣一來你就有更多的時間去做更多的事情。如果你不執著於舊的科技,你會發現探索當代的、強大的計算機的功能也是一件特別有趣的事情。

和上面所說的比起來我更關心的是編譯的速度。我不是一個禪師,10秒+的等待對我來說是浪費時間,真的是這樣,最重要的是它打斷我工作的連續性。在這期間我可能會開啟Twitter,然後突然發現已經過去5分鐘了。

我不是一個OOP(物件導向程式設計)的擁護者。我已經花了職業生涯中大部分的時間使用類和物件,但我花的時間越多,我越不明白為什麼要將程式碼和資料那麼嚴格的結合起來。我只想將資料作為資料處理,編寫最適合特定場景的程式碼。

可供選擇的方案

毋庸置疑,c++仍是遊戲開發中最常用的語言。雖然非常不喜歡它,但是幾乎我所有的合約工作都依靠它完成。

c++能滿足我的需求,但它不是我想要的。它太複雜了。儘管是個很好的工具,但它也很容易出現隱藏的BUG,而且它比C編譯地慢。雖然它效能很好,並且提供了很多C語言沒有的特性,但我並不需要這些特性,尤其是在加大語言複雜度的情況下。

c#和Java比較相似。他們像冗長和複雜的野獸,而我只想找一個簡單明瞭的生物。他們都做了很多工作來載入程式員培養物件導向程式設計的風格,而我反對這麼做。如同大多數高階程式語言的一樣,他們習慣於隱藏語言的複雜性,而這實際上並不能真正使你免於出錯。

我很喜歡Go語言。從很多方面它都是C的再生版,想想這些年自從它釋出以來的表現。我願意使用它,但是它也有一些棘手的問題阻礙著我。STW(stop-the-world)垃圾回收機制(即垃圾回收時,需要暫停使用者的所有其他執行緒)是遊戲開發永遠的痛,因為“停止一切執行緒”的確是一件讓人無法接受的事情。目前支援遊戲開發的庫很少,儘管你可以不費力地使用C語言庫,但這也增加了很多工作量。不過Go是一種足夠好的程式語言,我至少不用擔心它的長遠發展。

開發Web應用是件很不錯的事情,但web環境和技術的發展太過迅猛。很難相信flash就要消失了。我真的不喜歡javascript,它的規範太寬鬆了, 我驚奇人們能夠依靠它編寫大量的軟體。然而我沒有興趣去嘗試它。

我感覺Haxe(一門新興的程式語言)比大多數其他語言更有前途。如果我再做web開發的話,我會考慮使用它。它有良好的庫支援。但是我有點擔心它相對太新了,它能夠持久嗎? 因為我只是簡單的瞭解了一下,所以沒辦法做更多的介紹了。

Jonathan Blow正在開發他想要的程式語言。我欣賞這種做法,有時我也會萌生同樣的念頭。但考慮到要放棄現有的庫支援,而且要為它未來的相容性負責,我就會覺得壓力好大。況且,這本來就很難。相比於開發一種程式語言,我寧願開發遊戲。

為什麼C是始終是我的最愛

C語言很危險,但同時它也很可靠。就像一把鋒利的刀子,既可以切蔬菜但同時也可能切到手指,但好在是學會安全的使用它並不是一件難事。

它非常快,尤其是在編譯方面我想不出任何比它更快的語言。

它幾乎可以執行在任何平臺上。通常這是一個相對容易的事情。你很難想象不是這樣的情況。

它的庫和工具支援非常強大而且持續。

我這樣說有些悲傷,但它仍然是我摯愛的語言。

我絕對不會說“嘿,你也應該使用C語言開發”。我非常欣賞獨特而與眾不同的愛好。我比大多數人寫過更多的標準C程式碼,而這正是我感到欣慰的地方。

沒錯,就是它 :-)

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

為什麼我要用 C 來開發遊戲? 為什麼我要用 C 來開發遊戲?

相關文章