统一的侵入式链表
「完全拒绝UB是缺乏工程实践的表现」 ——TypeCombinator
前言
去年,我在写下了在purecpp上的第一篇文章——《统一的侵入式链表》,文章里最初的原型是几年前是使用C语言实现的,一直躺在我的私人仓库里吃灰。直到去年我在做调度器优化的相关工作的时候我才回想起来,于是将其拿出来用C++改写,并做了一些尝试和探索(见GitHub仓库uit),通过这次分享和提问,我得到了ykiko迅速且精准的回答,也意识到了这个idea和C++标准之间的矛盾,遂弃坑了一段时间,但是,终极问题的种子一直深埋脑海——如何让这个idea能够work呢?
在后续的日常开发中,我又有了新的思路,实践之后,先前无法通过的测试均能在三大编译器上通过,当然其中过程也并非一帆风顺,哄了Clang和GCC好几小时,这两位才让我构造的测试通过,至于MSVC嘛,向来情绪稳定,毫无意外地通过了测试。需要说明的是新方案不仅在用法上更灵活,也没有引入任何额外分支或其他消耗,且不需要加任何额外的编译选项或是在源码中加一些属性,在最高优化等级下,三大编译器均可通过所有测试!