我用 C(是的,C)写游戏(2016)
Source: Hacker News
为什么我用 C(是的,C)写游戏
我是一只不寻常的野兽。最近我独立制作的所有游戏都使用 vanilla C 编写。没有人这么做,所以我觉得解释一下我的原因可能会很有趣。
枯燥的编程语言观点即将到来,已警告。
我对语言的需求
有一些不可协商的要求。
- 可靠性 – 我不能把时间花在处理我自己没有造成的 bug 上。
- 持久性 – 我的许多游戏是为 Flash 编写的,而现在 Flash 正在消亡。我不想把时间花在把旧游戏移植到新平台上;我想制作新游戏。我需要一个我有信心能够长期存在的平台。
- 可移植性 – 我想避免绑定到特定的操作系统,理想情况下 我希望能够有开发主机游戏的选项。因此,编程语言的可移植性以及它拥有良好的可移植库支持非常重要。
我对语言的需求
最重要的(但非必须)条件是 简洁性。我发现查找语言特性和奇怪的“巧妙”API非常耗费精力。理想的语言应该是我能记住并且不需要再查阅的。
-
严格类型 & 静态分析 – 更少的 bug,强大的警告信息,以及帮助快速发现问题的工具。
-
优秀的调试器 & 动态分析 – 让排错不再是创意的消耗。
-
性能 – 我并不追求高保真真实感,但更多的循环可以拓宽你能做的事物范围,尤其在现代强大的计算机上。
-
快速编译 – 等待 10 秒以上会打断我的思路;我需要一个能跟上我思考速度的编译器。
-
数据中心化的方式 – 我不是 OOP 的拥护者。我更倾向于把数据当作数据来处理,编写适合情境的代码,而不是把所有东西都强行塞进类和对象。
-
C++ – 仍然是游戏中最常用的语言,这并非没有理由。我几乎所有的合同工作都用它,但我非常不喜欢它。它满足我的需求,却严重不能满足我的欲求:它极其复杂,容易产生隐蔽的 bug,且相较于 C 编译速度更慢。
-
C# 和 Java – 冗长且复杂的怪兽,把程序员硬塞进我反感的强 OOP 风格。它们以一种并不能真正防止的方式隐藏复杂性。
-
Go – 作为 C 的现代化实现很有吸引力,但全停顿的垃圾回收对游戏来说是个大痛点,库支持不足,我也担心它的长期价值。
-
Web 开发 – 环境变化极快,尤其在 Flash 退出后更是如此。我非常不喜欢 JavaScript;它太松散,以至于我惊讶人们还能用它写大型软件,我也没有兴趣去尝试。
-
Haxe – 相比大多数替代方案更有前景,拥有一些不错的库支持,但我担心它相对年轻且寿命未知。我只浅尝辄止。
-
自己写语言 – 我欣赏这个想法,有时也会玩玩,但抛弃现有库支持并承担未来兼容性的全部责任感觉负担太大。它也非常困难,我宁愿做游戏而不是编程语言。
为什么 C 仍然是我的最佳选择
- C 很危险,但它可靠——像一把非常锋利的刀,既能切蔬菜也能割到手指,却又足够简单,只要小心学习就能使用。
- 它很快,在编译速度方面我想不出更快的了。
- 它几乎可以运行在任何平台上,通常只需要相对容易的工作。很难想象有一天会出现例外。
- 库和工具链的支持强大且持续更新。
我带着些许悲伤地说,但它仍然是我的语言。
我绝对 不是 在说“嘿,你也应该使用 C”。我的偏好相当具体且不寻常。我已经写了比大多数人更多的 原生 C 代码,这当然也是我舒适感的一部分。
所以,就这样 :-)