keep moving

2019 年总结

Posted on By condy

4 月之前

2019 年 4 月,企鹅离职,想写点自己的代码。接触了一点 freelancer 平台,如 freelancerfiverr,才发现自由职业者真是不容易,光鲜亮丽的背后是高昂的跨境转账手续费。

4 月之前的事大多已经忘记,只记得刷了一些 leetcode medium 难度的题目;看完了 牛奶可乐经济学;看完了 自控力,精髓只有 2 个字「锻炼」(可惜我没有做到 😿

那个时候,通过 too many listsrust by exampletrpl 学习了 rust。拿 uuid 练手,写了一个 uuid 的库 yauuid

不得不提的还有另外一个未完成品 sleepyhead,它狠狠地把我摁在地上摩擦。当初是想搞个基于 stackfullcoroutine 网络调度库,结果最主要的调度功能完全没实现。究其原因,还是太高估自己掌握 rust 的程度了,步子迈得太大。

难得的是,常在角落吃灰的 Switch 终于出场了 2 次:

  • Splitter Critters 促销、买、通关、Archive 一气呵成
  • 薄暮传说 一周目,可怜都通关了还不会放秘奥技

4 月是你的谎言

面试 PingCAP,前面的 miniwork 是要实现 external sort。以 8 个月后的视角来看这份代码,当时没写 Executor 是什么情况?

嗯,跪了

噔噔噔噔,这里有一个小插曲,让我发现了许多有趣的项目,如 katranknot 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 vs computed goto 等一系列编译器扩展

  • Eric Niebler, David Hollman “A Unifying Abstraction for Async in C++”

Emacs ❤️ Vim

当看着 rust 社区使用 vim 可以让文档型注释中的代码块高亮时,作为一个 c++ 用户感到好羡慕啊。不知不觉,觉得写注释也是一件非常有成就感的事情。 于是花了几天时间,从 rust.vim 里把对应高亮语法块的部分抽了出来,增加了对 c/c++ 的支持,算是一点微小的 贡献 吧 :)

经过 iovxw 的安利以及自己不断地学习抄袭别人的 emacs 配置,终于有一个比较舒适的配置了。

而选择 emacs 的原因是它的渲染太好看了!

配置主要参考了

作为一个 6 年 vim 用户,本身已离不开 vim 所提供的编辑输入模式,而且这种方式自己感觉也比较舒服,所以我选择 evil-mode。 再加上本身所使用的 vim 插件不多,也就很顺畅得迁移过去了。

在使用 bazel 的同时,水了一些 emacs-bazel-mode 的 pr.

Bipolar

由于 bipolar 是一个全新的 c++ 项目,对于构建系统的选择可以大胆一点。当时考虑的主要有 bazel, CMake, meson, gnplease

  • 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 性能,相对于基于 epollecho server 粗略估计优 13%,当然 完完全全不能作为基准。

此外,在编写的过程中也发生了一点有趣的事情:

  • 遇到了 2 个 clang bug
  • UdpSocket 可以使用 connect 来设置远端地址以可以使用 send/recv,当然这也算是一种过滤 UDP 包手段。

bipolar 里还有许多东西没有写,例如最重要的 Promise.

TODO

动漫

舞 Hime

致郁番,还好最后全员白魔法复活。我的胃好痛 😭