ClangIR 现状与展望
ClangIR(简称 CIR)是 LLVM 社区内的一个目前仍处于孵化状态(incubator)的新项目,其目的在于基于 MLIR 框架为 clang 前端设计一个抽象层次介于 Clang AST 和… 阅读更多 »ClangIR 现状与展望
ClangIR(简称 CIR)是 LLVM 社区内的一个目前仍处于孵化状态(incubator)的新项目,其目的在于基于 MLIR 框架为 clang 前端设计一个抽象层次介于 Clang AST 和… 阅读更多 »ClangIR 现状与展望
随着 C++20 的普及,modules 这一重磅特性在主流工具链中也逐渐得到了愈发完善的支持。目前三大主流编译器中,MSVC 拥有最成熟的 modules 支持,Clang 紧随其后,gcc 也在加… 阅读更多 »C++20 Modules Cheatsheet
最近 C++ 标准委员会投票将 C++ 标准库提案 P2530 合入了 C++26 标准。本文将对该提案中包含的 hazard pointer 这一库特性进行介绍。 动机 无锁 Multiset 我们… 阅读更多 »Hazard Pointers
泛型编程中,提供通用功能的库由于无法精确得知用户提供的对象的类型,往往只能采用效率不佳的通用算法实现功能。例如,STL 中提供的 std::swap 函数由于无法得知需要被交换的两个对象的类型,只能在… 阅读更多 »定制点对象和 tag_invoke
dynamic_cast 是 C++ 中包含的四种类型转换操作符之一,它利用运行时类型识别(RTTI)特性在运行时检查并转换多态对象的类型。它的主要功能包括: 上面的第二个功能点在一定的额外条件满足时… 阅读更多 »dynamic_cast 的实现方法分析以及性能优化
最近我在知乎回答了一个有关 undefined behavior 的问题(知乎回答见这里),这个问题以及这个回答的关注数量和获赞数量都远远超出了我对一个普通的 C++ 问题能获得的关注的预期。由此可见… 阅读更多 »浅谈 C++ Undefined Behavior
今天上午的分布式系统课程内容中包含了可线性化(Linearizability)和序列一致(Sequential Consistent)的内容,不知不觉联想到了 C++11 中新引入的六种 memory… 阅读更多 »理解 C++ 的六种 Memory Order
C++20添加了两个declaration specifier:consteval 与 constinit 。前者只能参与函数的声明,后者只能参与变量的声明。 在介绍 consteval 与 cons… 阅读更多 »C++20: consteval & constinit
程序中常需要一次性传递多个同质对象。我们一般通过传递两个迭代器的方式来传递多个对象,这两个迭代器按约定一般称为首迭代器和尾迭代器。首迭代器指向被引用的多个对象中的第一个对象,尾迭代器指向被引用的多个对… 阅读更多 »C++20: Ranges
Constraints 和 concepts 是 C++20 引入的两个非常受欢迎的特性。Constraints 和 concepts 的引入使得原本许多只能依靠 SFINAE 等模板黑魔法的写法变得… 阅读更多 »C++20: Constriants & Concepts