為什麼我要用C寫遊戲
本文由碼農網 – 葉露原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
我就是這樣一個與眾不同的老頑固。最近所有由我單獨完成的遊戲專案完完全全都是用C寫的。肯定沒人這樣幹過,所以我覺得這值得我解釋下為什麼我要這樣做。
枯燥的程式語言觀點要來啦!嗯,我已經警告過你們了。
從一種語言中我們所需要的
有些事是毋庸置疑的。首先,它必須是可信任的。我不能花費我的時間去解決那些不是我導致的bug。以前許多遊戲都是用flash來編寫的,然而現在flash正在面向滅亡。我也不想花費不必要的時間將老遊戲移植到新的平臺,我想要的是製作新的遊戲。因此我需要一個在一段時間內都能自信使用的平臺。同樣,我想要避免自己被一個特定的作業系統捆綁。理想狀況下我喜歡我可以有發展控制檯的選項。所以選擇一種程式語言最重要的是它是可移植的,並且有可移植式庫的支援。
從一種語言中我們所想的
我所追求的最重要的,但不是必要的一件事就是其簡單性。我發現查詢語言的特性和它所具備的聰明古怪的API是一件及其累人的事!理想的語言是-這些東西都可以被記住,而無需去查詢它們。另外,處理那些bug絕對會使你的創造性流失。所以我想要一個強型別的、強大的錯誤提示以及靜態程式碼分析來減少bug的出現。我還想要一個好的debugger和動態分析來使我更容易發現bug。我不關心效能是否強大,但至少可以用。如果你不追求逼真的話它可用現代、功能強大的電腦盡情探索其可能性。
我甚至會關心編譯器的速度問題。我不是可以非常專注的禪師,等待超過十秒對於我來說是一種浪費,但更重要的是這會打破我思考的節奏。
我不追求物件導向(OOP)。我已經花了太多時間在管理類和物件上面,但我發現花了更多的時間,卻不太明白為什麼要把程式碼和資料嚴格的結合起來。我想要處理資料並且編寫適合特定情況的程式碼。
備選方案
C++ 仍然是編寫遊戲最普遍的語言,沒有原因。我用它寫了很多專案,但其實我非常不喜歡它。
C++ 涵蓋了我所需要的,但卻沒有滿足我想要的。它實在太複雜了!儘管一些工具相當好,但它還是十分容易出現bug。和C相比C++編譯速度很慢。但即使它具備高效能並且有C所沒有的一些特性,但我並不在意這些有的沒的。
C# 和 Java 有些通病。它們都是冗長複雜的怪獸,我所需要的是簡單簡潔的東西。 它們都迫使程式設計師去思考物件導向程式設計的風格,這通通都是我反對的。作為一個高階語言,它們應該有隱藏其複雜性的趨勢。
相比我更喜歡Go。在許多方面它是C的再發展,我會選擇使用Go,但是它也有個很大問題阻止我使用它。使用stop-the-world的方法來實現垃圾回收演算法對於遊戲是件再煩人不過的事情。遊戲庫的支援也是有點弱,雖然你可以使用C庫,但這會增加更多的工作量。這足夠讓我懷疑它長期的實用性。雖然它很好的服務於web,同時這具備了一個可怕的快速移動環境的性質。這可有點flash滅亡的意思。然後我想說我真的真的不喜歡javascript,它是如此的鬆散模糊,我特別訝異居然有人能夠在軟體中使用它寫上一大塊。我簡直沒有一丁點興趣嘗試它。
Haxe 感覺上比其他語言更有前景。如果我還做些和web有關的東西的話我會選擇它。它有很好的庫支援。我就有點擔心它不太成熟,能不能長久的問題。好了,我也沒什麼要說的了。
Jonathan Blow正在編寫他自己的語言,一種他自己想用的語言。我特別羨慕,有時候我也會考慮做這件事。但想想,需要丟棄所有現有的庫支援和承擔未來相容性的責任以至於太對需考慮。並且這實在太困難了,當本質問題於此,我寧願去做遊戲好了。
為什麼C是我的最佳選擇
C既危險又可靠。 就像一把鋒利的刀,切手指和切蔬菜一樣,但學會小心的使用它也不會太難。
它編譯的時候特別快,我無法想像有什麼比它更快。
它還可以在任何地方執行,通常較為容易。我都想不到它什麼時候不能像這樣工作。
庫和工具支援又強大又不間斷地更新。
我要很悲壯的告訴你們,這就是我的語言。
我絕對不會說“嘿,你也應該使C”我完全贊每個人有不同的個人偏好和特別的習慣。只想說相比用其他語言來說我已經編寫了很多C 程式碼,並且這令我很舒服。哦好吧,就這樣 :-)
譯文連結:http://www.codeceo.com/article/why-i-write-games-in-c.html
英文原文:Why I Write Games in C (yes, C)
翻譯作者:碼農網 – 葉露
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 為什麼我要用 C 來開發遊戲?開發遊戲
- 我們為什麼要用RedisRedis
- 為什麼我要用GoEasy替代WebSocketGoWeb
- Dubbo為什麼要用Go重寫?Go
- 為什麼 BIND 10 要用 C++ 和 Python 來寫C++Python
- 為什麼要用docker?Docker
- 為什麼要用dockerDocker
- 為什麼要用RedisRedis
- 什麼是 BPMN ?為什麼我們要用 BPMN 和工作流 ?
- 為什麼要用SOCKS代理?
- 為什麼要用混合加密?加密
- 我為什麼寫《致IT同仁》薦
- 為什麼要用Node.jsNode.js
- 為什麼要用Redis叢集?Redis
- 為什麼要用資料中臺
- 為什麼要用 Node.jsNode.js
- 為什麼要用單例模式?單例模式
- 為什麼要用工廠模式模式
- 為什麼我要用 Node.js? 案例逐一介紹Node.js
- 為什麼 SQLite 用 C 編寫?SQLite
- 我為什麼冒險寫QuarkAdmin!
- 為什麼我要寫自己的框架?框架
- 為什麼要用Redis?Redis為什麼這麼快?(來自知乎)Redis
- 為什麼要用原生 JavaScript 代替 jQuery?JavaScriptjQuery
- 為什麼要用儲存過程儲存過程
- C++中為什麼要用指標,而不直接使用物件?C++指標物件
- 我為什麼看好騰訊START雲遊戲遊戲
- Koala Framework是什麼?我為什麼要寫這個框架?Framework框架
- 我們為什麼要技術寫作
- Tobias Koppers:我當初為什麼寫webpackWeb
- 為什麼我要編寫自己的UIKitUI
- 計算機為什麼要用補碼計算機
- python為什麼要用執行緒Python執行緒
- Android開發為什麼要用MVP?AndroidMVP
- PG資料庫為什麼要用autovacuum資料庫
- 為什麼要用代理和動態代理
- 什麼是智慧指標?為什麼要用智慧指標?指標
- 我為什麼減少使用C++ (轉)C++