不是不支持协程,,没看我怎么说的,“多用协程解决一切问题“。
我比较希望 js 能够隐式地支持协程。。
c# 为什么选择 async/await 两个关键词,因为 c# 本身是支持线程的,老旧的 c# 程序都会调用 win32api 里面的阻塞 IO API,以及创建线程做并行计算. 为了在阻塞 IO 这一套语义之外并存地支持协程,c# 不得不额外支持 async 函数,显式地告诉程序员,这是个协程操作。
而 js 不一样。js 目前所有的运行环境,不论是浏览器还是 node,都是单线程并且异步的。根本不存在 c# 阻塞 IO 的情况。如果我是 js 的设计师,我不会无脑抄袭 async/await 这一套恶心的东西。而是会要求所有的 IO 操作必须隐式支持协程。也就是说,所有的 js 函数,自动地加上 async 前缀,所有调用 async 函数的地方,自动地加上 await. 不想要自动 await 的话,就加个 spawn 关键字,返回 promise (实际应该有个额外的 task 类型,用于 cancel() 协程)
python 的情况和 c# 类似,但是 python 本身拥有 gil,所以实践上 python 开发者使用线程多半是为了调用底层的阻塞 IO API,很少用于计算的。如果我来设计 python,我会直接把 gevent 并入语言核心。
实际 stackless python 搞这一套已经搞了十几年了。js 社区好像发现新大陆一样。唉。。
【 在 chaobill (若我离去,后会无期) 的大作中提到: 】
: once await , never back
--
FROM 124.72.119.*