- 主题:把js全干掉,统一成ts,有没有搞头?
你之前的原话是
: async/await 也不是啥新奇玩意儿。python 原本支持的语法叫 yield from 完全等价于 await,当年 python 改动关键字的那个 c 补丁我都看过,没几行代码基本就是数据结构改名和增加关键字就完事了。再早的是 yield 实现的,搭配 twisted inlineCallbacks() 使用,更早的话,十几年前 eventlet 和 gevent 就非常成熟可应用在生产中。
我之前的问题是
: 为啥根据python2012年加的yield from功能,说dotnet2003年的不是啥新鲜玩意?
现在又跑到stackless python去了。
没关系,聊这个也行。那个年代线程池类型的协程多了去了,各个语言都不少。
但问题是,你分得清 线程池类型的协程 和 async/await类型的协程 的区别么?
多线程入门的人都应该分得清的,总共有两点改进,这两点是各个语言的控制者抛弃线程池类型的协程的根本原因
要是分不清,糊里糊涂的,那没准能追溯到一八几几年去了
【 在 hgoldfish 的大作中提到: 】
: stackless python 是 1998 的产品。。
:
--
FROM 123.116.203.*
个人理解,前端编程用回调挺好的,特别是早期大量的事件响应式的编程模式,后续发展业务逻辑越来越复杂,才搞了好多版“补丁”,根子动不了。实际前端用await的比例也没那么高,就是请求下后端数据能用上。
随便找个前端工程,遍地都是 onXXX(()=>{…}) ,隐式await咋写?
真正特别适合隐式await,或者说显式开启协程的是后端,是node.js和go,写web server用着舒服。那js发明出来就不是做后端业务逻辑的,能写后端还有语法糖可用,就已经是意外之喜了,哪可能丢了写页面的老本行。
【 在 hgoldfish 的大作中提到: 】
: 你支持的跟我支持的不一样啊。。
:
: 我是想干掉 js 里面所有的回调。统一使用隐式的 async/await
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 115.192.188.*
async/await 本来就是 promise 的语法糖啊,跟 promise 一点区别都没有。
promise 虽然扁平化了 callback hell,但它还是用的 callback,不利于代码流的控制。引入 async/await 之后,所有的 callback 就都被移除了,变量都在同一个 scope 里面,在 catch/finally 里可以直接用,不用再特意跑到外层去构造一个 closure 专门用来放变量。降低了 closure 层的变量,大量的 let 能变成 const,明明更有利于做优化。此外,很容易忘记处理 rejected,用了 await 就不需要额外的记忆负担了。
【 在 javaboy (喝了咖啡就话多-_-;) 的大作中提到: 】
: 支持。
: 我觉得promise能把逻辑相关的代码整理到一起,而且和js的风格整体很搭,是个很棒的构造。然而async和await就没意思了。把好不容易组织到一起的代码再拆散掉。。。特别傻。
: js的这种async编程相当于把cronjob当eip用,会有巨大性能损失,神仙都没法jit。所以本来应该最小限度使用的。结果还特地弄两个关键字来鼓励这种写法。。。靠,就算2nm的cpu出来了,性能也经不起这么浪费啊。
: ...................
--
修改:eGust FROM 122.57.163.*
FROM 122.57.163.*
你还是不明白,多线程和async是两回事的,大部分async实际上是单线程的
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 我前面说过了啊。。
: python 有 GIL,约等于不支持多线程。python 日常使用的多线程,通常是用于阻塞 IO 的。
: 现在只要把所有的线程阻塞 IO 都替换成协程阻塞 IO,把 threading 模块替换成接口完全一样的 fiber 实现,那大多数 python 源代码,就可以在完全不修改的情况下,使用协程了。
: ...................
--
FROM 27.91.71.*
我知道。你就是想把语法糖做到极致,在async基础上实现sync,造成程序顺序执行的假象。这是可行的。和os实现socket阻塞read差不多。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 你支持的跟我支持的不一样啊。。
: 我是想干掉 js 里面所有的回调。统一使用隐式的 async/await
--
FROM 101.84.136.*
再早的 yield 你没看到么。。我很早就用 yield 写协程了。
stackless 发展出 eventlet,也是跟 c# 的 await 同时代的,而且做得明显更完善。
【 在 leadu (leadu) 的大作中提到: 】
: 你之前的原话是
: 我之前的问题是
: 现在又跑到stackless python去了。
: ...................
--
修改:hgoldfish FROM 112.47.122.*
FROM 112.47.122.*
把协程只用于网络编程是一种误解。
你说的 onxxx() 回调薅平也是一种应用:
async qAwait(eventName) {
let event = new Event();
vue.$once(eventName, event.send);
return await event.wait();
}
async fiber(event) {
qAwait("what event");
updateUi(v);
}
我已经把协程大量用于 UI 内部的, 非常好用。
再强调一遍,只要是有回调的地方,都可以变换成协程。你坚持用一段时间,就知道我这种方案的妙处了。思维被组织在一个个小的协程里面容易构造,更糙更快更猛。
【 在 StephenLee (薛定谔的猫) 的大作中提到: 】
: 个人理解,前端编程用回调挺好的,特别是早期大量的事件响应式的编程模式,后续发展业务逻辑越来越复杂,才搞了好多版“补丁”,根子动不了。实际前端用await的比例也没那么高,就是请求下后端数据能用上。
: 随便找个前端工程,遍地都是 onXXX(()=>{…}) ,隐式await咋写?
: 真正特别适合隐式await,或者说显式开启协程的是后端,是node.js和go,写web server用着舒服。那js发明出来就不是做后端业务逻辑的,能写后端还有语法糖可用,就已经是意外之喜了,哪可能丢了写页面的老本行。
: ...................
--
修改:hgoldfish FROM 112.47.122.*
FROM 112.47.122.*
跟 promise 一点区别都没有,发明这个语法糖干什么?
我觉得用 async/await 最大的好处是跟你们这些 fp 党划清界限。少了很多扯皮。
【 在 eGust (十年) 的大作中提到: 】
: async/await 本来就是 promise 的语法糖啊,跟 promise 一点区别都没有。
: promise 虽然扁平化了 callback hell,但它还是用的 callback,不利于代码流的控制。引入 async/await 之后,所有的 callback 就都被移除了,变量都在同一个 scope 里面,在 catch/finally 里可以直接用,不用再特意跑到外层去构造一个 closure 专门用来放变量。降低了
--
FROM 112.47.122.*
是的。。
内核本身是完全异步的,但是向 userland 提供了同步的抽象。
这个事情其实可以由编程语言来完成。
在编程语言这个层次做的话,不止于 IO,还可以应用在更广泛的场景里面。
【 在 javaboy (喝了咖啡就话多-_-;) 的大作中提到: 】
: 我知道。你就是想把语法糖做到极致,在async基础上实现sync,造成程序顺序执行的假象。这是可行的。和os实现socket阻塞read差不多。
--
FROM 112.47.122.*
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 标 题: Re: 把js全干掉,统一成ts,有没有搞头?
: 发信站: 水木社区 (Sun Jul 4 09:38:08 2021), 站内
:
: 跟 promise 一点区别都没有,发明这个语法糖干什么?
都已经写这么清楚了,还要喂到你嘴里吗?
> promise 虽然扁平化了 callback hell,但它还是用的 callback,不利于代码流的控制。引入 async/await 之后,所有的 callback 就都被移除了,变量都在同一个 scope 里面,在 catch/finally 里可以直接用,不用再特意跑到外层去构造一个 closure 专门用来放变量。
1. 简化控制流,更容易写代码
> 降低了 closure 层的变量,大量的 let 能变成 const,明明更有利于做优化。
2. 有利于 js engine 搞优化
> 此外,很容易忘记处理 rejected,用了 await 就不需要额外的记忆负担了。
3. 避免漏写 rejected 引发的问题
:
: 我觉得用 async/await 最大的好处是跟你们这些 fp 党划清界限。少了很多扯皮。
:
--
FROM 122.57.163.*