文章摘要
作者Jonathan Whiting解释了他选择用C语言开发游戏的原因:C语言可靠、稳定,不会因平台更迭而频繁迁移;具有高度可移植性,支持跨平台和主机开发;语言简单易记,无需频繁查阅文档,能专注于创作新游戏而非维护旧代码。
文章总结
为什么我依然选择用C语言开发游戏
我是一个特立独行的开发者。最近所有的个人游戏项目,我都坚持使用纯粹的C语言进行开发。这种做法在当今业界实属罕见,因此我想分享一下自己的思考。
核心诉求
硬性要求: 1. 可靠性:不能把时间浪费在解决语言本身的缺陷上 2. 持久性:经历过Flash消亡的教训后,我需要确保开发平台具有长期生命力 3. 跨平台性:必须支持多操作系统,最好还能兼容游戏主机开发
理想特性: - 简洁性:语言特性应该简单到可以完全记住 - 强类型系统:配合静态代码分析减少bug产生 - 高效调试:完善的调试工具和动态分析能力 - 编译速度:超过10秒的编译等待会严重破坏创作状态 - 性能表现:不追求极致画质,但需要保留创作空间 - 非强制OOP:更倾向于灵活处理数据和代码的关系
其他语言的局限
C++: 虽然仍是游戏开发主流,但过度复杂的设计容易产生隐蔽bug,编译速度也较慢。其提供的许多高级特性反而带来了不必要的复杂度。
C#/Java: 强制OOP范式与我的理念相悖,冗长的语法和隐藏的复杂性反而可能带来更多问题。
Go语言: 虽然设计理念先进,但垃圾回收机制不适合游戏开发,游戏库生态薄弱,长期前景也存在不确定性。
Web技术: JavaScript过于灵活导致大型项目难以维护,快速迭代的技术栈也令人不安。Haxe虽然前景较好,但生态成熟度仍需观察。
自制语言: 虽然极具吸引力,但意味着放弃现有生态支持,且我更愿意专注于游戏开发本身。
C语言的优势
- 锋利而可靠:虽然需要谨慎使用,但掌握后非常稳定
- 极速编译:目前最快的编译体验之一
- 无处不在:几乎可以运行在任何平台上
- 强大生态:持续的库支持和工具链更新
需要强调的是,这只是我的个人选择。考虑到我已经积累了丰富的C语言开发经验,这种选择可能并不适合所有人。但就目前而言,C语言依然是我的最佳拍档。
评论总结
以下是评论内容的总结:
支持使用C语言的观点
简洁性与控制力
- C语言简单直接,适合需要底层控制的场景(评论1, 21)。
- "C is a constructor, and as a constructor it places few limits on what you can do"(评论21)。
- "I like the fact that C gives you so little... you have to think about your problem at a very fundamental level"(评论23)。
历史与实用性
- 许多经典游戏(如id Software的作品)是用C开发的(评论9, 15)。
- "Literally thousands of games have been written in C"(评论9)。
反对使用C语言的观点
协作与开发效率
- 团队协作时,C代码库可能带来痛苦(评论1)。
- "Working in a group on a C codebase tends to introduce pain"(评论1)。
- UI开发在C中尤为繁琐(评论3)。
现代替代方案
- 现代语言(如Rust、Zig)在安全性和工具链上更优(评论2, 18)。
- "Zig is actually simpler than C while being more precise"(评论18)。
关于C++的争议
复杂性争议
- C++的复杂性是自找的,可以通过限制特性使用来避免(评论10, 16)。
- "C++ doesn’t take longer to compile if you don’t abuse templates"(评论10)。
- 但C++社区对最佳实践的分歧令人困扰(评论23)。
与C的对比
- C++是C的超集,但部分开发者认为其特性冗余(评论16)。
- "C++ is, practically speaking, a superset of C... All self-inflicted problems"(评论16)。
其他语言推荐
- Odin:结合C的简洁性和Go的现代性(评论2, 5)。
- Zig:简化C的同时提供更精确的类型系统(评论18)。
- Rust:适合需要内存安全和并发的场景(评论2)。
关键引用保留
- 支持C:
- "C is my language and served me well for decades"(评论1)。
- "C is a constructor... places few limits on what you can do"(评论21)。
- 反对C:
- "Why would you brag about it?"(评论16)。
- "C is a systems programming language, not an application programming language"(评论22)。
- C++争议:
- "C++ is a rotating pell post full of sharp knives"(评论19)。
- "People say 'I use C and not C++' to say something about themselves"(评论16)。