啊根 发表于 2020-11-25 15:21

为什么CryEngine、Unreal这些行业顶级引擎,代码写得这么乱?

为什么CryEngine、Unreal这些行业顶级引擎,代码写得这么乱?

ペ猥小琐ぺ 发表于 2020-11-25 15:22

说实话现在开源的UE和CE质量都不差。不像以前都是只给自家人看,写的乱一点也行。你看lumberyard和CryEngine V的源码,完全就是两个级别。
不知道问题的题目(为什么CryEngine、Unreal这些行业顶级引擎,代码写得这么乱?)有何根据,是以什么标准来说他们不好。在他们开源之前业界比较认同的好代码是Quake,你先以自己的标准给它打个分,如果觉得不符合你的标准,那就是标准的问题。
我说说为什么游戏引擎的代码为什么会写的乱。主要是两个原因。
1.需求变更。相比传统行业软件(ERP,CMS)之类一步一步做过来的软件,引擎的更新迭代非常快。为了紧追新技术,不得不做出大规模重构才能保证代码规范。比如CE的代码,基本框架其实做了十来年也没大变化(内存管理,IO之类),而渲染部分支离破碎,基本上每换一代技术就加一套模块。你看每个模块都很漂亮,但整个项目结构很乱也是这个原因。而UE则直接丢掉前一代重新开发了新版本。PS:CE5把以前的代码全部重构了一遍,现在一点不乱。
2.优化。最开始看这些代码的时候觉得挺怪,函数的声明都老老实实的写在各自的头文件里,定义往往都挤在一个cpp里面,在别的语言(JAVA之类)是根本无法想象的。目的是为了让CPU能更快的cache指令。其实程序员一开始绝对不会写成这样的。
题主说他们不符合软件设计原则也请举出具体例子。我虽然说由于这两个原因会破坏软件设计原则,但我不承认这些引擎就都被破坏了,我看到的UE4处处体现了设计原则,大量的设计模式应用,六大原则一点不缺。上百个模块清晰可见,模块内部职责明确。另外游戏引擎本身就要处理复杂的数据流,没有强健的架构模式也不可能支撑运行的。

ableegg 发表于 2020-11-25 15:22

在这个体量下,这么多功能的稳定实现。请给一个更好的范本吧。

suke_008 发表于 2020-11-25 15:22

Vincent 发表于 2020-11-25 15:23

软件的设计,永远是功能优先,而不是好看优先

曾经,我主导的两三个项目,有一些关键的功能,就是因为会影响整体结构的设计而被我砍掉了

所以项目失败,虽然可能不是主要的原因

UE4已经做得非常好了,我不觉得它乱,可能是你看不懂所以觉得乱,一些不得已的Hack,我不认为你能找到更合理的写法,那些你觉得优雅的代码,你确定它除了优雅还有其他价值?

一些书里没有的最新的设计模式非常棒,我不认为这个行业最顶尖的人有时间把那些模式整理出来耐心的教人看懂,他们真的有太多更有意义的事情要做

荠菜包子 发表于 2020-11-25 15:23

具体乱在哪?比如结构上的,还是风格上的,还是命名规则之类的?
和什么相比觉得乱?拿这俩货和hello world比显然不合理。得和代码及功能规模相近的项目比。能具体举个例子吗?

ghostlcj 发表于 2020-11-25 15:23

操作系统代码也是goto到处飞。。。底层的东西看中的更多的应该是性能吧,所以可读性不是很重要了,毕竟一个功能要优化到可怕的地步。

yangjingchi 发表于 2020-11-25 15:24

先问是不是,再说为什么系列?
Unreal4代码是自成一派风好伐?无数团队效仿的对象好伐?

tutushetou 发表于 2020-11-25 15:24

是类似这样的代码么?写的乱糟糟的,居然还有magic number
float Q_rsqrt( float number )
{
        long i;
        float x2, y;
        const float threehalfs = 1.5F;

        x2 = number * 0.5F;
        y= number;
        i= * ( long * ) &y;
        i= 0x5f3759df - ( i >> 1 );               // what the fuck?
        y= * ( float * ) &i;
        y= y * ( threehalfs - ( x2 * y * y ) );
        y= y * ( threehalfs - ( x2 * y * y ) );

        return y;
}
页: [1]
查看完整版本: 为什么CryEngine、Unreal这些行业顶级引擎,代码写得这么乱?