4 月之前
2019 年 4 月,企鹅离职,想写点自己的代码。接触了一点 freelancer 平台,如 freelancer、fiverr,才发现自由职业者真是不容易,光鲜亮丽的背后是高昂的跨境转账手续费。
4 月之前的事大多已经忘记,只记得刷了一些 leetcode medium 难度的题目;看完了 牛奶可乐经济学;看完了 自控力,精髓只有 2 个字「锻炼」(可惜我没有做到 😿。
那个时候,通过 too many lists、rust by example 和 trpl 学习了 rust。拿 uuid
练手,写了一个 uuid
的库 yauuid。
不得不提的还有另外一个未完成品 sleepyhead,它狠狠地把我摁在地上摩擦。当初是想搞个基于 stackfull 的 coroutine
网络调度库,结果最主要的调度功能完全没实现。究其原因,还是太高估自己掌握 rust 的程度了,步子迈得太大。
难得的是,常在角落吃灰的 Switch 终于出场了 2 次:
Splitter Critters
促销、买、通关、Archive 一气呵成薄暮传说
一周目,可怜都通关了还不会放秘奥技
4 月是你的谎言
面试 PingCAP
,前面的 miniwork
是要实现 external sort。以 8 个月后的视角来看这份代码,当时没写 Executor
是什么情况?
嗯,跪了
噔噔噔噔,这里有一个小插曲,让我发现了许多有趣的项目,如 katran、knot dns。不过由于这个插曲编写得不是很完美,一些计划也戛然中止了。
4 月之后
随后,我开始疯狂寻找 Executor
相关的提案。
初见这个 Group,以为找到了希望,一看里面的实现,全是玩具。无意中发现 folly 底下有个 pushmi
子库,遂研究。
看着满屏的模板,我哭了。
…
期间找了无数的提案,慢慢地到了 CppCon 2019
的季节……
CppCon 2019
-
Andrei Alexandrescu - Speed Is Found In The Minds of People
启发意义, Try silly things!
-
Miro Knejp “Non-conforming C++: the Secrets the Committee Is Hiding From You”
富有激情的演讲,
switch case
vscomputed goto
等一系列编译器扩展 -
Eric Niebler, David Hollman “A Unifying Abstraction for Async in C++”
Emacs ❤️ Vim
当看着 rust
社区使用 vim
可以让文档型注释中的代码块高亮时,作为一个 c++
用户感到好羡慕啊。不知不觉,觉得写注释也是一件非常有成就感的事情。
于是花了几天时间,从 rust.vim 里把对应高亮语法块的部分抽了出来,增加了对 c/c++
的支持,算是一点微小的 贡献 吧 :)
经过 iovxw 的安利以及自己不断地学习抄袭别人的 emacs
配置,终于有一个比较舒适的配置了。
而选择 emacs
的原因是它的渲染太好看了!
配置主要参考了
- Centaur Emacs 配置的组织方式也是从这里学来的,感谢!
- ladicle’s config
作为一个 6 年 vim
用户,本身已离不开 vim
所提供的编辑输入模式,而且这种方式自己感觉也比较舒服,所以我选择 evil-mode
。
再加上本身所使用的 vim
插件不多,也就很顺畅得迁移过去了。
在使用 bazel 的同时,水了一些 emacs-bazel-mode 的 pr.
Bipolar
由于 bipolar
是一个全新的 c++
项目,对于构建系统的选择可以大胆一点。当时考虑的主要有 bazel
, CMake
, meson
, gn
和 please
。
CMake
作为Makefile
的屠龙勇者,并且通过 FetchContent 也可以比较好的解决问题。但是它的内建类型构建在string
之上,操作起来尤其麻烦。meson
可以看作是一个语法优雅版本的CMake
,使用的概念与CMake
类似,没有新意,不喜。gn
作为chromium
的副产物,实力无庸置疑。但是它需要额外配置toolchains
规则。本着不想维护其他gn
文件的原则,gn
在这里就出局了。please
是在看到 这篇文章 时发现的,试用之后感觉不错。但是,连最基础的cc_test
都出错的时候,直接放弃了。4 个月之后修复了,见这个链接.bazel
作为唯一能用的一个,唯一的缺点就是依赖了jvm
,以至于有时候会有CI
上跑着测试会触发OOM
…
在选定了 bazel
之后就是完善一下它常用的一些选项了,如 sanitizer
, kcov… 有时候真的很羡慕 rust
用户,因为这些工具别人已经做好并且发布到 crates,只需要 cargo
安装一下。
以简单的 echo server
测试了一下 io_uring
的网络 IO 性能,相对于基于 epoll
的 echo server
粗略估计优 13%,当然 这 完完全全不能作为基准。
此外,在编写的过程中也发生了一点有趣的事情:
- 遇到了 2 个 clang bug
UdpSocket
可以使用connect
来设置远端地址以可以使用send
/recv
,当然这也算是一种过滤UDP
包手段。
bipolar 里还有许多东西没有写,例如最重要的 Promise
.
TODO
动漫
舞 Hime
致郁番,还好最后全员白魔法复活。我的胃好痛 😭