编程语言“颜色”难题:异步与同步困境,Go语言如何破局? 一种新语言为写博客假设一门新语言语法类似JS支持一等函数高阶函数实用可用于测试框架和数据解析开启函数狂欢。你的函数是什么颜色的这门语言函数有红、蓝两色定义和调用有规则高阶函数编写棘手核心库部分函数为红色带来诸多麻烦。这是函数式编程的错即便不用高阶函数拆分程序为独立函数时也会出现颜色问题如Dijkstra算法代码提取成函数时颜色难定。一个色彩寓言红色函数即异步函数以Node.js上JavaScript编程为例说明异步函数带来“回调地狱”人们创建异步库解决问题。我保证未来会更好Node社区用Promise解决回调函数问题但仍有局限无法完全解决异步与同步代码的麻烦。我在期待一个解决方案C#用“await”关键字调用异步函数异步 - 等待让异步代码编写变容易但仍存在颜色问题影响代码库。哪种语言没有 “颜色”JS、Dart、C#、Python等语言有颜色问题Java、Go、Lua、Ruby无此问题它们共同点是有可切换的多个独立调用栈。对过往操作的回忆异步IO需展开并丢弃C调用栈Node用延续传递风格解决问题但手动具现化步骤麻烦Promise和future作用有限。期待生成式解决方案异步 - 等待进行CPS转换编译器将代码编译成链式闭包生成器也有类似作用但最终仍会将异步函数拆成闭包。具现化的调用栈线程可避免异步带来的麻烦Go语言在这方面表现出色消除同步和异步代码区别解决颜色问题带来的麻烦。