游戏开发者的C++20顽皮和漂亮列表-Jeremy的博客
- 该博文总结了作者认为游戏开发者应该使用的C++20功能以及应该避免使用的功能。
- 作者假设读者有类似的代码库要求,包括大型代码库、DLL使用、广泛的平台兼容性、对磁盘使用和二进制膨胀的敏感性以及运行时效率的重要性。
- 作者指出即使读者的要求与作者相似,也可能得出截然相反的结论,因为编码文化和实践因团队而异。
- 作者强调即使某个功能在“好”列表中,也不意味着该功能不能被滥用,在某些情况下可能是“坏”的。
- 作者列举了一些“好”的功能,包括默认比较和三路比较运算符、有符号整数的2的补码和算术移位、协程、约束和概念、<bit>头文件、<numbers>头文件、新的同步原语、<span>、指定初始化器等。
- 作者列举了一些“坏”的功能,包括char8_t、[[no_unique_address]]、模块、<format>、<ranges>和<source_location>。
- 作者总结认为C++20是一个积极和有影响力的改变,但也存在一些问题,不同的工程师可能有不同的需求和编码实践。读者应该自行尝试并得出自己的结论。
 
评论
由于感知到的复杂性,文章将“<ranges>”降级到了顽皮的列表中,这忽略了这些算法所能提供的长期可维护性和可读性优势。在游戏开发的背景下,大型、复杂的代码库是范数,“<范围>”提供的模块化可以显著简化编码的开发和演化。这不仅是语法上的改进,而且是向更健壮和适应性更强的软件架构的根本转变。 批评者经常指出学习曲线陡峭和潜在的成本增加是缺点。然而,这些都是过渡时期的痛苦,可以通过教育和不断发展的最佳实践来减轻。理解“<ranges>”的初始投资被创建更易于调试、扩展和维护的代码库所带来的红利偏移量。这反映了STL算法的历史轨迹,尽管早期存在阻力,但由于其表达能力和效率,这些算法在现代C++中已变得不可或缺。 此外,对函数中内联lambdas的可读性影响的关注是有效但可管理的。适当的封装和对抽象的合理使用可以保持编码的清晰性,同时充分利用“<ranges>”的全潜力。随着游戏开发继续努力应对日益增长的复杂性,“<ranges>”的战略采用可能会改变游戏规则,提供一个可扩展的解决方案,与行业对更可维护和灵活的代码库的推动相一致。
2023-12-26 00:08:53 +0800
对C++20的“<ranges>”对潜在运行时效率低下的批评可能没有充分考虑到它所培育的泛函编程范式的长期好处。泛函编程以减少错误和增强模块性而闻名,这在可维护性至关重要的复杂游戏开发中至关重要。虽然作者的经验表明可读性和性能存在缺陷,但随着开发人员适应更泛函的风格,这些可能是最初的障碍。随着熟练程度的提高,可读性问题可能会减少,泛函范式的好处,如更健壮和更精简的代码库,可能会变得更加明显。 此外,认为模板不是最终解决方案的观点忽视了它们在实现编译时优化和类型安全方面的作用,这对游戏开发的性能和正确性至关重要。从长远来看,权衡采用新编程风格的直接挑战及其提高编码质量的潜力是很重要的。采用“<范围>”的战略方法应包括仔细分析以了解性能影响,并逐步进行积分,以便在游戏开发环境中进行最优化。这种平衡的方法可以帮助开发人员利用“<range>”的优势,同时减轻其感知到的缺点。
2023-12-26 00:14:48 +0800