我可以想象表达式模板会为 vector/矩阵/四元数等普遍存在的东西的编译时间做可怕的事情,但如果它的速度提升如此之大,为什么游戏不使用它呢?很明显,SIMD 指令可以充分利用数据级并行性,从而发挥巨大作用。表达式模板和惰性求值一起似乎很有意义,至少在消除临时变量方面是这样。
因此,虽然像 Eigen 这样的库宣传此类功能,但我认为在中间件(例如 Havok)或对速度要求极高的游戏中,这种做法并不常见。有人能解释一下吗?它与非确定性或分支预测有关吗?
最佳答案
我能想到很多原因:
- 这会影响编译时间。编译时间越长意味着测试对代码所做的任何更改都需要更长的时间。这会损害生产力。
- 这很复杂。团队中的许多开发人员很可能不熟悉表达式模板,并且很难阅读和调试它们。
- 游戏通常必须在多个平台上运行,并且使用各种编译器,这些编译器可能存在各种各样的缺点,例如,这可能会导致高级模板欺骗出现问题。
- 一般来说没有必要。您无需表达式模板即可编写高效的代码。它只会变得更加冗长,并且您必须为编译器做更多的操作。
- 游戏开发者对 10 年前尚未在游戏中使用的任何内容都极为怀疑。不久前,几位主要开发人员坚持使用 C:不是因为 C++ 不够好,而是因为它"new"。游戏开发者非常保守。
当然,还有一个显而易见的问题:在哪里他们会使用表达式模板?是否有足够的复杂数学来真正使其值得?游戏往往依赖于相当少量的线性代数运算,在任何情况下通常都需要大量手动调整。
关于c++ - 为什么游戏不使用数学表达式模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449877/