我用 C 写游戏(是的,C)

发布: (2026年2月8日 GMT+8 01:45)
6 分钟阅读

Source: Hacker News

为什么我用 C(是的,C)写游戏

我是一只不寻常的怪兽。最近我所有的个人项目游戏都是用 原生 C 编写的。几乎没有人这么做,所以我觉得解释一下我的原因可能会很有趣。

干巴巴的编程语言观点即将到来,已警告

我对语言的需求

有一些不可妥协的要求。

  • Reliability – 我不能把时间浪费在处理我自己没有造成的 bug 上。我的很多游戏都是为 Flash 编写的,而现在 Flash 正在消亡。我 不想 花时间把旧游戏移植到新平台;我想制作新游戏。我需要一个我有信心能够长期存在的平台。
  • Portability – 我想避免绑定到特定的操作系统,理想情况下 我希望能够有开发主机游戏的选项。因此,我的编程语言必须具备可移植性,并且拥有良好的跨平台库支持。

我对语言的期望

我最看重(但并非必需)的特性是 简洁性。查找语言特性和那些古怪的“巧妙”API让我感到非常疲惫。理想的语言应该是我能记住的,然后再也不需要查阅。

  • 严格的类型系统和静态分析 – 更少的 bug、更强的警告信息以及静态代码分析。
  • 优秀的调试工具 – 动态分析和调试器能够让定位错误更容易。
  • 性能 – 我并不追求高保真真实感,但我在意拥有足够的计算资源,以便在现代强大电脑上拓展我的可能性。
  • 快速编译 – 等待 10 秒以上会打断我的思路;快速的编译能够保持我的生产力。
  • 以数据为中心的方式 – 我不是面向对象的拥趸。我更倾向于把数据当作数据来处理,并编写适合具体情境的代码,而不是把所有东西都强行塞进类中。

The Alternatives

  • C++ – 仍然是编写游戏最常用的语言,这并非没有原因。我几乎所有的合同工作都用它,但我非常不喜欢它。它满足我的需求,却严重无法满足我的欲望。它极其复杂,尽管工具还算不错,但很容易产生隐蔽的 bug。它的编译速度也比 C 慢。
  • C# and Java – 两者都冗长且复杂。它们把程序员逼向一种我反感的强 OOP 风格,并且倾向于以看似隐藏复杂性的方式出现,却并没有真正防止它们伤害你。
  • Go – 我非常喜欢它;在很多方面它是重新审视的 C,考虑了自 C 发布以来的经验教训。然而,停顿世界的垃圾回收对游戏来说是个大麻烦,而且游戏库支持不足。封装 C 库会增加繁琐工作,我也担心它的长期相关性。
  • Web‑focused options – JavaScript 对我来说太松散,且 Web 生态系统发展速度惊人,尤其在 Flash 退出后。Haxe 显示出前景,库支持尚可,但它相对年轻让我对其寿命存疑。
  • Creating my own language – 我欣赏这个想法,有时也会玩玩,但抛弃现有的库支持并承担未来兼容性的全部责任感觉工作量太大。我宁愿做游戏,也不想写编程语言。

为什么 C 仍然 是我最合适的选择

  • C 很危险,但它可靠——就像一把非常锋利的刀,既能切蔬菜也能割到手指,但又足够简单,能够小心学习使用。
  • 它很快,在编译速度方面,我想不出更快的了。
  • 它几乎可以运行在任何平台上,通常只需要相对容易的工作。很难想象有一天会不再如此。
  • 库和工具的支持强大且持续。

我带着些许惆怅地说,但它仍然是我的语言。

我绝对 是在说“嘿,你也应该使用 C”。偏好是相当具体且不常见的。我也已经写了比大多数人更多的“原生” C 代码,这当然也是我舒适感的一部分。

所以,就这样。 :-)

0 浏览
Back to Blog

相关文章

阅读更多 »

我用 C(是的,C)写游戏(2016)

为什么我用 C 写游戏——是的,C。我是个不寻常的怪物。我最近制作的所有个人项目游戏都是用 vanilla C 编写的。没有人这么做,所以我……

Python–TypeScript 合约

《The Python–TypeScript Contract》封面图片 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to...

Zig vs Go:泛型

引言:Go 在 1.18 版中引入了泛型,允许函数和结构体按类型进行参数化。Zig 长期支持编译时泛型……