今天让 ChatGPT 深度研究了一下 sans-IO,学到了一些新东西。
https://chatgpt.com/share/69181cbe-55e8-8011-950f-5d0b4973502c
除了之前就了解的关于复用、便于测试等优点,这次了解到:
1) sans-IO 其实起源于 Python 从 sync 转向 async 的一些探索。传统的解析网络协议的方法,与 IO 操作混在一起,无法同时支持 sync+async IO。如果用 sans-IO 方式,则可同时支持。Rust 也有 sync vs async 问题,所以 sans-IO 在 Rust 中的采用,也是可预期的。不仅如此,sans-IO 方式也可方便地支持不同的 async runtime (tokio, async-std, smol etc),不必与某个 async runtime 绑死。
2) `tokio` 的 codec 竟然也符合 sans-IO 理念。这个之前没想到,虽然之前就用 codec 来实现过 socks5 协议。
Login to reply