等疾风

正在捣鼓协程

等疾风

前言

重要数据·务必备份!固态硬盘报废,连带 Linux 无了,只能重装。恐将来也会频繁装机,故写一篇笔记,希望一劳永逸。

Read more »

Hello,我是等疾风!本篇介绍在 co_context 中用到的性能优化技巧,希望在各位 C/C++ 道友的项目上有所帮助。重点将在技巧的入门,而不是 co_context 本身。

Read more »

co_context 是最近开发的 C++ 异步协程框架,基于 Linux io_uring。「易用性」和「性能」是我们最重视的属性,这篇文章,我们介绍在 co_context 中有关易用性的设计。

Read more »

co_context 是最近开发的 C++ 异步协程框架,以易用性为最高目标,尽量兼顾性能。希望从此 C++ 的异步能比 Node.js 更简单,更优雅。

co_context 是基于 Linux io_uring,I/O 走内核态协议栈,这是 co_context 努力逼近的性能上限。

Read more »

最近开发 co_context,遇到了很多 C++ 周边的坑。其中一个坑是 intellisense 翻脸不认 C++17 标准的强制拷贝消除(Mandatory elision of copy/move operations)。

这个 intellisense 来自 Vscode Extention: C/C++ (Microsoft)。

Brief Solution

1
2
3
4
5
#ifdef __INTELLISENSE__
// The fake code to cheat intellisense...
#else
// The real code for compiler...
#endif
Read more »

Preface

要掌握 C++20 协程,仅仅看完文档是远远不够的。C++ 和其他语言的协程的最大不同点在于,C++ 提供了最少量的编译器实现和极大量的「可定制点」,而其他语言可能连「调度器」都给用户准备好了。

在茫茫多的可定制点面前,如果你能一眼看出「为什么 C++ 要这样设计」,那么我愿称你为天才。否则,还是从常见的范式下手,逐渐体会设计者的思想吧。

我们将从最简单的范式——Generator 下手。

Read more »

1
2
3
4
5
6
7
template<typename Lambda>
struct Defer : Lambda {
~Defer() { Lambda::operator()(); }
};

template<typename Lambda>
Defer(Lambda) -> Defer<Lambda>;
1
2
3
4
// usage
Defer guard{[sockfd]{
shutdown(sockfd, SHUT_WR);
}};
Read more »

Preface

在研究 CRTP 时发现了一种经典应用——表达式模板。今天学一学,顺便水一篇博客。🐶

Motivation and example

表达式模板是一种模板元编程,它在编译期展开向量的一系列复合运算,从而将辅助空间从 $O(n)$ 降到 $O(1)$。相比于朴素算法,表达式模板属于惰性求值,求值时间点是赋值运算。

Read more »

Preface

「多态」是一个很宽泛的理念,对应繁多实现。本文将记录我所看到的多态的各种形态。作者见识短浅,还请读者多多指教。

  • 本文已计划的内容:
    • 基于 std::visit
      • 实现运行时多态的优化
      • 实现重载模式
    • CRTP 实现静态多态
      • 静态多态
      • 静态接口
      • CRTP 的一些分析和 trick
    • C++20 前基于 SFINAE 的模板偏特化
    • C++20 后基于 concepts 的模板特化
    • Hack 虚函数表,用于优化
      Read more »

本文意在阐述 C++ 智能指针的实现原理,应用场景和潜在的坑。

Read more »