C++20 Modules Cheatsheet
随着 C++20 的普及,modules 这一重磅特性在主流工具链中也逐渐得到了愈发完善的支持。目前三大主流编译器中,MSVC 拥有最成熟的 modules 支持,Clang 紧随其后,gcc 也在加… 阅读更多 »C++20 Modules Cheatsheet
随着 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 的实现方法分析以及性能优化
前面提到,对于第三章引入的 untyped lambda calculus,对一个 term 进行求值可能会有两种结果。第一种结果是我们可以一路将这个 term 求值为一个 value,例如对 isz… 阅读更多 »TaPL Chapter 8 – Typed Arithmetic Expressions
在过去的一周内,我完全重写了我的博客(也就是您正在访问的这个站点!)的前端,其中利用了 Notion 最新的官方 API 访问我管理在 Notion 上的文章。事实上,这个站点上的所有博客文章都是从如… 阅读更多 »在 2022 年使用 Notion 管理博客文章
在第五章中引入的 untyped pure lambda-calculus 中,所有的变量都有一个符号名称,例如 x、y、s 和 t 等。然而,在执行 substitution 时,这些为变量指派的符… 阅读更多 »TaPL Chapter 6 – Nameless Representation of Terms
本章从零开始,完整地介绍了 untyped pure lambda-calculus 的 syntax、求值规则,并给出了大量的有关 untyped pure lambda-calculus 的使用示… 阅读更多 »TaPL Chapter 5 – The Untyped Lambda-Calculus
本章给出了一个非常简单的 mini language,其 abstract syntax 如下: 围绕这样一个简单的 mini language 进行讨论,本章介绍了如下的重要概念和工具: Synta… 阅读更多 »TaPL Chapter 3 – Untyped Arithmetic Expressions
最近我在知乎回答了一个有关 undefined behavior 的问题(知乎回答见这里),这个问题以及这个回答的关注数量和获赞数量都远远超出了我对一个普通的 C++ 问题能获得的关注的预期。由此可见… 阅读更多 »浅谈 C++ Undefined Behavior