V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  pursuer  ›  全部回复第 1 页 / 共 16 页
回复总数  318
1  2  3  4  5  6  7  8  9  10 ... 16  
5 天前
回复了 bli22ard 创建的主题 程序员 rust vs golang 交叉编译
C/C++的静态交叉编译,glibc 是个坑我得承认,感觉上 musl 静态编译的话应该还好吧?当然 C++动态库 ABI 那就是另一个天坑暂且不提了。
@IplayLF2 这类方案很多,我想实现的是在原生 async/await 上不需要侵入其他库的方案,不过实际搞下来不经过编译确实不行。
@lee88688
我后续改的版本就是用生成器函数(yield)实现的,和 redux saga/co 一样,但是这个和原生 async/await 不兼容,就不怎么实用了。
@Opportunity
patch 只考虑浏览器可能可行,只是很麻烦,但是如果是 node 环境下感觉就 patch 不完了
10 天前
回复了 XIVN1987 创建的主题 C C 中可变参数如何直接传递到 printf()
我觉得 C 中缺少两个机制,一个是动态函数调用,类似 libffi 。另一个是简单的栈切换,类似 ucontext 。这两个东西依赖 C 的 ABI ,又有不少上层应用需要这个特性,特别是 ffi 。不知道会不会有一天被加入标准库。
12 天前
回复了 zhouhuab 创建的主题 程序员 反向代理后的端口数量限制
有的反代可能支持使用 Unix Domain Socket 或 Windows Named Pipe ,虽然我觉得最好的方案还是服务都能支持一个连接复用的网关模型。
20 天前
回复了 Mohanson 创建的主题 程序员 对于 WebAssembly 2.0 的一些看法
wasm 最初的目的是在浏览器中使用,加速编解码之类的,所以有 SIMD 是很顺理成章的。但是 wasm 应该支持特性探测,允许运行时实现不支持部分高级特性。
空安全可以通过高级语言实现,倒也不必一定要在 wasm 层面纠结,但是我是没懂为什么每种引用类型需要用一个单独的 table
24 天前
回复了 xiaopeng 创建的主题 分享创造 新上线小游戏: Sprunki, https://sprunki.im/
感觉是我第"10086"次看到这个类型游戏的变种发在 V 站?想知道是不是哪个项目拿这个游戏当例子了。。。
25 天前
回复了 qiayue 创建的主题 分享创造 预告一个小产品,让天下没有难上的站
有点类似 github pages ,但是我觉得你需要考虑下为什么 gitee pages 停止服务了
25 天前
回复了 TheBlind 创建的主题 分享创造 FinalShell 替代者 TShell
用了 Graalvm 真是意外,不过我看到 node-pty 以及任何 gyp 相关库也是会头皮发麻
@xiaofeilongyy555 C/C++的问题还是太容易写挂了,悬垂指针,或者内存 UAF,Double Free 就可能炸穿整个程序而且稍不注意就可能踩坑了。其他语言好歹 try catch 一下可能只是部分功能异常。
34 天前
回复了 passive 创建的主题 Windows 谁能举个例子, Win11 究竟哪儿不好用了?
我都是把任务栏挂右边的,结果 win11 把这个功能砍了可还行。。。
@nomagick 测试了下还真是,我发布的第一个有 BUG 的版本在被 tsc 编译为 yield 模拟 await 的代码里是正常运行的。使用原生 js 的 await 时,onfulfilled 的行为有点奇怪,不会立即运行 await 后面的代码。尝试 queueMicrotask 和 Promise.then 清除 currentTask 均不能按预期位置运行,唯一稍微可用方案是 setTimeout(0)但存在可能 4ms 限制且这个也不能确定执行时间点,只能在较大程度上缓解 currentTask 泄漏到其他 Promise 的问题。
@nomagick 推了新版本解决了这个 BUG ,原来是我脑抽本地两份代码撤销的时候不一致了。

不过就像我前面说的,当前写法会导致 task 标记泄露污染不在 taskMain 里创建的 Promise ,不够完美。但目前想不到更好的办法了。
@nomagick 浏览器上复现了你的问题,初步推断原因是 onfulfilled 后的代码被放到下一 tick 运行了,虽然可以简单通过移除
finally{task.currentTask='';}解决,但可能造成 task 泄露,我还得再看下
@nomagick
使用同一版本依然无法复现问题。。。用的 windows x64 ,运行你给的代码如下

sh-3.1$ node -v
v20.11.1
sh-3.1$ npm run build && npm run test

> [email protected] build
> tsc


> [email protected] test
> node dist/index.js

task 1 running
{}
task 1 running
{}
task 1 running
{}
abort task 1
Task 1 error
AbortError: This operation was aborted
Task 1 finally
@nomagick 我这边有 node 和 Chrome 测试是正常的,输出是
{ count: 0 }
{ count: 1 }
{ count: 2 }
abort task 1
AbortError: This operation was aborted
不知道你那边用的什么运行时,可能哪里还有瑕疵,试试看 task.locals.count 赋值删除能不能抛出异常?
@nomagick 抛出异常符合预期的,Python 也是抛出 CancelError ,只有抛出异常才能保证类似 try{}finally 的资源正常释放。
因为我是用了 super.then 的,所以原本 promise 的内部处理应该遵照原有的实现,只是在 onfulfilled 前检测中止状态,转为调用 onrejected
@nomagick 这个方法确实比较 hacky ,里面也可能埋藏着尚未发现的坑,所以我也指明这是一个实验性的项目。只是有时候确实想要个这样的控制 async/await 运行流的工具,不知道 tc39 以后会不会搬出类似的东西。
1  2  3  4  5  6  7  8  9  10 ... 16  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2673 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 25ms · UTC 10:17 · PVG 18:17 · LAX 02:17 · JFK 05:17
Developed with CodeLauncher
♥ Do have faith in what you're doing.