怎么样的电脑做游戏(为什么我选择用 C 编写游戏?)
“古老”的C++,仍然是当前编写游戏时最常用的语言,但是C为什么才是最适合的?
作者|JonathanWhiting
译者|弯月,责编|郭芮
出品|CSDN(ID:CSDNnews)
以下为译文:
我喜欢走不寻常路。最近我所有的个人项目游戏都是利用“最普通”的C语言编写的。所以,我觉得有必要解释一下为什么我选择用C编写游戏。
下面让我们来谈一谈有关编程语言的见解,我警告你这些内容可能有点枯燥。
编程语言必须具备的条件
有些事情是没有商量的余地的。首先,这种语言必须可靠。我可不愿花时间去处理那些不是我自己造成的错误。
我的许多游戏都是用Flash编写的,现在Flash快要死了。我不想花时间将旧游戏移植到新平台,我想制作新游戏。我需要一个可以在很长一段时间都保持稳定的平台。
同样,我也不想将自己绑定到特定的操作系统,而且理想的话,我希望该语言还可以为游戏机开发游戏。因此,我选择的编程语言必须拥有可移植性,这点很重要,而且拥有良好的可移植库支持。
期待编程语言具备的条件
虽然不是必须条件,但我最想要的首先是简单性。我感觉查找语言功能和稀奇古怪的“聪明”API极其令人厌烦。我希望我可以记住这种理想的编程语言,而且再也不必查找任何东西。
处理Bug会消耗大量脑细胞。我希望产生的bug越少越好,所以我希望这种语言能严格检查拼写,强烈的警告消息和静态代码分析。我希望很轻松就能发现bug,所以我想要良好的调试器和动态分析。
我对实现高清并不感兴趣,但我却十分在意性能。节省下更多的CPU时钟周期,意味着你有更多的余地去尝试别的东西。如果你不追求高分辨率,那么探索现代功能强大的计算机的潜力会非常有趣。
此外,我更加关心编译器的速度。我不是禅宗大师,对我来说等待10秒钟以上就是浪费时间,而且更重要的是,这会打乱我的节奏,我会情不自禁打开Twitter,一晃眼5分钟就过去了。
我并不热衷于面向对象。我一生的大部分时间都在处理类和对象,但是花的时间越多,就越不明白为什么要如此严格地结合代码和数据。我想单独处理数据,然后再编写最符合特定情况的代码。
其他替代语言
C++仍然是当前编写游戏时最常用的语言,这并非没有道理。几乎我所有的签约工作中都使用了C++。但我非常不喜欢C++。
C++可以满足必备的条件,但是严重不符合我所期望的一些条件。C++极其复杂。尽管C++有很多优秀的工具,但很容易制造出隐匿的bug。与C相比,C++的编译速度也较慢。虽然C++的性能很好,而且还提供了C所没有的功能,但这些都不是我想要的功能,而且因此付出的代价是高度的复杂性。
C#和Java也有类似的问题。这两种语言都非常冗长且复杂,我想寻找一种简洁明了的编程语言。C#和Java都是面向对象的风格,而我却非常不喜欢面向对象。与大多数高级语言一样,这两种语言都倾向于隐藏复杂性,但实际上并不能减轻复杂性给我带来的困扰。
我很喜欢Go,这种语言的很多方面都继承了C,而且还考虑到了自发布以来多年积攒的经验。我喜欢使用Go,但是Go也有一个重大问题。对编写游戏来说,“暂停一切”的垃圾回收是一个巨大的痛苦,“暂停一切”是我无法忍受的。此外,Go对游戏的库支持非常差,尽管你可以通过包装C库来解决这个问题,但是这样做会增加很多工作量。而且Go的定位让我对其长期的发展充满了担忧。
Go语言用来制作Web的东西也不错,但是感觉Go语言发展得太快。我真怕它像flash那样死掉了。此外,我真的不喜欢javascript,它太过于宽松,看到人们利用javascript编写大量软件,我由衷地感到惊讶。我自己没有兴趣尝试。
感觉Haxe比其他编程语言更有前途。如果再做Web开发的话,我可能会深入研究一番。这种语言也有一些很好的库支持。但我担心Haxe过于年轻,还能持续发展多久?我不想对此妄加发表评论,毕竟我只是浅尝辄止。
看到这里有人可能会说,这么挑剔干脆自己写一门编程语言吧。我很佩服创造出新编程语言的人,我自己常常也有这种想法。但我感觉放弃现有的库支持,并为将来的兼容性承担全部责任,这个担子有点过重了。而且这也是非常困难的,所以还是回归现实,我宁愿做游戏,也不愿创建新的编程语言。
为什么C仍然是我的最佳选择?
C很危险,但是很可靠。C就像一把锋利的刀,虽然有可能会划破手指,但也可以切菜,而且C非常简单,学会谨慎使用也非难事。
C的速度非常快,我想不出还有什么比C的编译更快的编程语言。
C几乎可以在所有环境中运行,而且通常都比较容易。很难想象无法运行C的情况。
C拥有强大且持续的库和工具。
虽然说这话的时候,我略感悲伤,但C仍然是我的首选语言。
我绝不是想鼓动每个人都来使用C。我在本文中所做的推荐针对非常具体且不寻常的情况。我已经编写了大量非常“普通”的C代码,而且我感觉使用C语言的时候最舒适。
以上,感谢阅读。
原文:https://jonathanwhiting.com/writing/blog/games_in_c/
本文为CSDN翻译,转载请注明来源出处。
【END】