时间:2022-10-09 17:54:22 | 浏览:454
你是否也曾发现那些顶级球星常常能够轻松做出各种高难度动作,而其他球员却无法做到。你是否也在疑惑这其中的原因,为什么顶级球星看起来毫不费力?
作为一名C++程序员,John Carmack 的源代码就像顶级球星的球技一样震撼着我。其代码简单而强大,我很想知道自己如何才能像他一样优秀。
让我们来探索 Doom3(游戏:毁灭战士) 的源代码,深入其中,寻找这些代码简单但强大的原因。
2011年11月23日,id Software(游戏软件公司)延续自己的传统,发布了他们之前引擎的源代码。这些源代码被众多开发者审阅,下面是其中一个针对 Doom3 的反馈信息:
Doom 3 BFG由 C ++编写,C++是一门既强大又复杂的编程语言,它可以编写出无比优秀的代码,但同时也可能让你欲哭无泪。幸运的是,id Software的 C++子集(拥有类的 C 语言)可以让你轻松运用 C++ :
没有异常
没有引用(使用指针)
尽可能少使用模板
常量无处不在
拥有类
多态性
继承
它仅仅是 c++ 98 标准的一个子集。以下是 Doom3 的一些特性:
1、提供一个强大的基类
众多的类都从 idClass 继承而来:
idClass 提供了下列服务:
(1)实例创建
(2)类型信息管理
(3)事件管理
2、字符串操作非常简单
通常来说,字符串是一个项目中最常用的数据类型,许多功能都需要字符串来完成,我们需要使用函数来处理它们。
Doom3 定义了一个 idstr 类,它几乎包含了所有与字符串操作相关的方法,非常实用。这样一来,你就不必像其他框架那样需要根据不同的字符串类来定义自己的方法。
3、源代码与GUI框架(MFC)高度解耦
在很多使用 MFC 的项目中,代码与它们的类型高度耦合,并且你可以找到任何代码在 MFC 中的类型。
在 Doom3 中,代码与 MFC 高度解耦,仅有 GUI 类与之直接相关。如下面的 CQLinq 查询所示:
这个特性大大提升了开发效率。的确,只有 GUI 开发人员必须关心 MFC 框架,而对于其他开发人员来说,则并不需要在 MFC 上浪费时间。
4、提供了一个非常强大的utility程序库(idlib)
几乎在所有项目中,utility 程序类都是最常用的,如下查询结果所示:
从以上查询结果可以发现 utility 是用得最多的。如果 C++ 开发人员没有一个强大的 utility 程序框架支撑,那么他们将不得不花费大量的时间自己编写。
idlib 几乎提供了很多实用的类和方法,可用来处理字符串、容器和内存。这有利于提升开发人员的工作效率,让他们更加专注到游戏逻辑上。
5、容易理解
作为 C++ 开发人员应该都知道开发解析器和编译器并非易事,而 Doom3 成功实现了一个硬编码的编译器。并且 Doom3 的实现代码非常简洁也很容易理解。
下图展示了编译器使用的类之间的依赖关系:
以下是编译器源码的代码片段:
过去我也曾研究过很多解析器和编译器的源代码。但是,这是我第一次发现一个编译器的源代码如此易懂,除了编译器之外,整个 Doom3 的源代码也一样容易理解。这真的很神奇。当我深入研究 Doom3 的源代码时,发现这些代码真的写得太好了。
Doom3 的源代码只使用了 C++ 标准的一个子集,它非常简洁并且易于理解和维护。它遵循代码设计、命名和格式化的基本规范,并没有使用高级技术。
John Carmack 的编程秘诀是完全遵循维基百科定义的 KISS 原则:
KISS 是由美国海军在1960年提出的一项设计原则,KISS 是 “ Keep it simple, stupid ” 的缩写。KISS 原则指出,相比于复杂的系统,越简单的系统往往运行效果越好。因此简单性应当是设计过程中需要关注的关键指标,同时应当尽量避免不必要的复杂性。
KISS 原则的核心思想是:相比于复杂的系统,越简单的系统往往运行效果越好。
采用新C++标准时的注意事项
新标准引入了许多有趣的新功能。但是不要认为使用这些功能就可以让你的代码变得高效。实际上,许多新功能对开发通用库更为有用,特别是与通用编程相关的功能。
不要强迫自己使用所有的新功能,在绝真正需要或者有助于提高代码效率时使用即可。例如,这篇文章就讨论了过度使用 auto 关键字的缺点。
想要在程序员生涯内有更高的成就的话,C/C++就是一个既可以强化思维能力,又可以打好编程基础的编程语言,你想要做软件开发,成为核心程序员的话,学习C/C++的话笔者有一个C/C++的编程俩千人羣(Q艘索:C/C++编程学习13群)你如果感觉自学C/C++语言有困难的话,有兴趣学习或者了解一下C/C++编程的小伙伴就可以进来交流。
汇编语言,在我看来,汇编绝对是最难学习的一门语言。汇编语言为什么难,得从它的特点说起,汇编是一门直接操纵处理器的低级语言,这里说它低级,是相对于高级语言(如C++/Python/Kotlin)之类编程语言而言。学习汇编可以让人更加清楚的了解
先来看看本节知识的结构图吧!接下来我们就逐步来看一下所有的知识点:结构的演化C++中的类是从结构演变而来的, 所以我们可以称C++为”带类的C”.结构发生质的演变C++结构中可以定义函数, 称之为成员函数结构定义格式, 像这样:struct
记者 | 陈晓珍编辑 | 9月7日,猎聘发布的《短视频领域中高端人才招聘解析》(以下简称“报告”)显示,短视频领域新发职位的招聘年薪呈持续增长态势。2021年1-8月短视频新发职位平均招聘年薪为27.02万元,相比于2020年(21.05万
作者 | Herb Sutter译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)C++20已全票通过,有望于今年晚些时候发布9月4日,C++ 20的国际标准草案投票结束,而且获得了全票通过。这意味着C++ 20已完
编辑:桃子【新智元导读】程序员「35岁定律」更像是圈内人的自嘲。近日,一位45岁程序员发帖称,「自己精通各种技术体系,却连个面试机会都没有」。据统计,不论是在国内还是国外,35岁以上的程序员占比最少,尤其在中国仅有9.4%。大龄码农真的如此
来源:【消费日报】□ 本报记者 卢 岳少儿编程作为近年大热的素质教育科目,随着政策利好的不断加码,已成为越来越多家长的选择。记者注意到,随着行业的不断发展优化及家长意识的迭代更新,在市场持续高温的背后,围绕少儿编程的机构发展及消费端需求,已
一个半小时的试听课结束后,儿子很兴奋,在课程销售的热情推介下,杭州的程芳(化名)刷了近3万元,给儿子报了两年半的编程课。“这是目前为止,给他报的最贵的兴趣班。”最近两年,在中小学生的课外培训市场上,少儿编程像一匹黑马冲了出来,日渐火热。上个
长江日报融媒体6月25日讯(记者陈智)对于非计算机专业的80后、90后来说,编程至今仍是能力范围以外的“技术活”,一串串代码只有程序员们能“驾驭”。但是,现在的不少00后已经可以熟练制作愤怒的小鸟,植物大战僵尸等小游戏。长江日报记者在百度上
在政策以及环境的驱动下,我国的少儿编程市场逐渐发展成型。但由于国内少而变成试产发展起步较晚,目前还有较大的空间有待发掘。10月10日,网易宣布正式上线少儿编程平台“网易卡搭编程”,完成了编程教育的重要布局。此外,编程猫获3亿C轮融资;小码王
青少年培训市场刮起了“编程热”,一如当年的少儿英语和奥数培训 少儿编程缘何成了资本的“香饽饽”?“时代真的不一样了,现在的孩子都开始学起了我在大学才开始接触的编程。”在重庆一软件开发公司上班的刘明看着手中刚刚拿到的宣传单感叹道,现在的培训机