其实绝大多数选用C++的人,追求的是zero-cost抽象:手上写的高等语法,脑子里盘算着这么写最后生成出来的机器语言会不会不完美。人家连用虚函数还是模板函数,都要纠结半天到底是要快几个cpu cycle还是省几个exe byte。
C++的exception是违背这种zero-cost抽象的。try-catch的语法加上RAII,一不小心就能让
catch部分本来就罗嗦的代码产生一堆副本,洁癖的人是受不了的。
这可能是绝大多数C++的库作者都不用异常的最大原因。
从汇编写到C写到C++的人,是不可能接受异常的。用异常的多半是java出身,学了点js,最后过来写C++的人,而且肯定不懂汇编的。
【 在 z16166 的大作中提到: 】
: 你试图用某几个项目没有使用异常,来证明异常不靠谱,这本身是个错误的推理。
: 因为按你这个推理,只有100%的项目都使用了异常,才能证明异常是靠谱的。
: "unreal engine没使用异常,是因为游戏帧数有响应时间要求",这是我拍脑袋的分析。对错与否,可以继续辩。
: 实际上,性能问题是unreal关注的重点之一。它自己的编码规范写的:
: "从历史上看,UE 避免直接使用 C 和 C++ 标准库。造成这种情况的原因有几个,包括:用我们自己的实现替换缓慢的实现,允许对内存分配进行额外的控制,在广泛可用之前添加新功能,进行理想但非标准的行为更改,在整个代码库中具有一致的语法,或者避免与 UE 的习惯用法不兼容
: 墓乖臁H欢昀矗曜伎獗涞酶游榷ê统墒欤⑶野宋颐遣幌胗贸橄蟛惆盎蜃约褐匦率迪值墓δ堋"
: 以上是unreal不使用某些C/C++特性的原因。在unreal早期开发时,C/C++的很多基础设施还不够好,包括跨平台的异常支持,但是一旦C/C++的标准实现比unreal自己撸的还要好时,它也是允许提出替换的,是开放的。
: C++抛出异常时确实有开销,而且可能还不小,这个我也没否认,所以才会认为可能影响游戏帧数响应。
: 不光是反射,unreal还有GC,这是它自己的balance,牺牲一点性能换取其他好处。能支持脚本开发,就是为了享用脚本开发的便利性和扩展性。
--
FROM 114.93.56.*