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
ClangIR(简称 CIR)是 LLVM 社区内的一个目前仍处于孵化状态(incubator)的新项目,其目的在于基于 MLIR 框架为 clang 前端设计一个抽象层次介于 Clang AST 和… 阅读更多 »ClangIR 现状与展望
在 Rust 中,一个指向未知大小对象(!Sized)的引用或指针被实现为一个由两个 usize 大小的域构成的胖指针。这两个域中,其中一个域保存了被引用或被指向的对象的地址,另一个域保存了一个名为 … 阅读更多 »Rust 虚表布局规则介绍
std::any::Any is an object-safe trait that can be used for implementing dynamic typing. It provides … 阅读更多 »Enable Dynamic Typing for Non-Owned Types
最近 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