Rust in Everything
基于 async-stream 0.3.6

设计取舍

01 和 02 沿着主线把代码走完了,这一部分不再看新代码,而是把前面零散提到的「为什么这样做」「代价是什么」放在一起看。只有一章:

  1. 取舍与对比:线程局部指针和通道各要付出什么,实测一百万项的每项开销和分配次数;0.3.6 修掉的 #106、#107 为什么是同一类问题,修法为什么选了一句编译期的 break;proc-macro 改写语法的三个代价;和 unfold、通道、async-fn-stream、futures-async-stream、原生 gen / async gen 块的对比,其中能在本机跑的都跑了一遍。
flowchart TB
  goal["在 stable 上写 yield"] --> how1["值怎么递:线程局部指针"]
  goal --> how2["yield 怎么认:proc-macro 改写"]
  how1 --> gain1["零分配、零同步"]
  how1 --> cost1["正确性压在宏的规则上"]
  how2 --> gain2["stable 1.65 就能用"]
  how2 --> cost2["只认字面位置,报错是编译器原话"]
  cost1 --> holes["0.3.6 修的两个洞"]

💬 关联讨论

发起讨论
加载中...