函数着色:async 如何把语言劈成两半
作者用一个自造的“红蓝函数”语言作寓言:每个函数必须选颜色,红函数只能被红函数调用,调用方式更繁琐,且部分核心库函数只有红色。谜底是——红即异步。JS/Node、C#、Dart、Python 都把世界切成同步与异步两半,根因是异步 IO 必须退掉整个 C 调用栈才能回到事件循环,于是回调、promise、async-await、生成器只能把调用栈手工具体化到堆上(CPS 变换)。async-await 治好了“调用很痛”,却没有消除颜色:同步函数返回值,异步函数返回 Future/Task 包装,仍需 await 拆包。Go、Lua、Ruby 靠 goroutine/协程/fiber 挂起整条线程,同步与异步的区分因此消失。C# 若改用线程同样可避开。适合关心并发模型与语言设计的工程师。