本周是十月第三周,也是十一假期后全面恢复上班的第一周。

Life

#1

这周五终于和老婆在小区某幢楼下的球桌上打上了乒乓球 🏓

十分过瘾和满足

下周老婆从富阳回来休息大概是周三、四、五,希望能打上两天(四五?)

#2

这周四踢了场球,上半场发挥还行,下半场就有点惨了。

球场的碎胶粒掉进了鞋子,把左脚大拇指下方的脚底板直接给磨破皮出血了…

下周打算先歇一周回复一下,然后考虑是不是真的得买一双封闭性好点的鞋子…

#3

这周看了两部电影:《独行月球》 和 《Kingsman 起源》

这两部给我的感觉差不多,都是中规中矩。

甚至独行月球给我的感觉比后者更好。

虽然老婆觉得独行月球搞笑的地方太少了,比不上夏洛特烦恼和羞羞的铁拳,但是我个人还算是觉得这影片及格往上还是有的,大概 6.5/10吧

Kingsman 的话剧本硬伤有点多了,这么强大的 Cast 最终的呈现其实是让人略微失望的, 5.5/10

Work

#1

这周工作重点是配合其他同事一起把我们 codebase 中的 Status 从 protobuf/stubs 切换到 absl

感慨一句终于切了啊,虽然是被某个库的升级逼着切换的。

讲道理要是半年前听我的意见 gradually phase out 的话,这周就不会这么鸡飞狗跳了。

因为几乎每一个源码文件都会涉及,并且我们对 Status 用法千奇百怪,手动一个一个替换几乎不可能,所以我写了一个 python 脚本来处理大多数的情况。

后来 suyang 在这个基础上又做了一次扩展,使得脚本几乎能处理所有我们已知的 case。

不过验证编译和测试的时间还是花了不少

脚本我贴这了:https://gist.github.com/kingsamchen/10a8a3e798eb59f27e0335a087134aca

检查了一下也没有泄露业务信息,还好

#2

本周没有继续学习 absl/synchronization,下周再弄吧…

#3

本周学习进度:

  • CppCon 2020 | How C++20 Changes the Way We Write Code - Timur Doumler
    介绍了 big-4 features: Coroutine, Concept, Ranges and Modules
    其中 coroutine 着墨最多,不过最后还是建议大家用 3rd lib,不要自己趟这个浑水。
    (这部分学到了 promise handle 是一个 stack 对象,关联一个 heap 分配的 coroutine frame,并且在很多情况下编译器可以优化掉这个 heap allocation)
  • CppCon 2020 | Halide: A Language for Fast, Portable Computation on Images and Tensors - Alex Reinking
    太高端了,而且感觉学不到啥,所以跳过了
  • 网络编程实战
    继续学习,目前感觉还不错;虽然目前的内容都是基础,但是可以作为查漏补缺
    主要是知识点展开合理,没有东边一下西边一下
  • 两篇 posts:
    • Knowing when not to use the STL algorithms - set operations
      核心大意就是根据具体的情况选择使用的 tools, 不要 blindly use STL algorithms
      我觉得是废话…
      C++ rtti vs 宏 - 如何优雅的获取类型T的name或ID

    • C++ rtti vs 宏 - 如何优雅的获取类型T的name或ID
      主流编译器都支持 __FUNCSIG__ 或者 __PRETTY_FUNCTION__ 宏,这个宏表示当前函数的签名,并且宏自然是编译期
      利用一个函数模板就可以把目标类型 T 挂上去

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      template<typename T>
      constexpr const char* type_name_raw() {
      return __FUNCSIG__;
      }

      template<typename T>
      constexpr std::string_view type_name() {
      std::string_view raw = type_name_raw<T>();
      std::string_view prefix = "const char *__cdecl type_name_raw<";
      std::string_view suffix = ">(void)";
      raw.remove_prefix(prefix.size());
      raw.remove_suffix(suffix.size());
      return raw;
      }

      int main() {
      using vs_t = std::vector<std::string>;
      constexpr std::string_view t = type_name_raw<vs_t>();
      std::cout << t << "\n\n" << type_name<vs_t>();

      return 0;
      }

      std::string_view 支持 constexpr,再利用编译期 std::string_view 操作分理出 T 即可


本周就是这样,下周见