V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  pursuer  ›  全部回复第 3 页 / 共 18 页
回复总数  355
1  2  3  4  5  6  7  8  9  10 ... 18  
319 天前
回复了 XIVN1987 创建的主题 C C 中可变参数如何直接传递到 printf()
我觉得 C 中缺少两个机制,一个是动态函数调用,类似 libffi 。另一个是简单的栈切换,类似 ucontext 。这两个东西依赖 C 的 ABI ,又有不少上层应用需要这个特性,特别是 ffi 。不知道会不会有一天被加入标准库。
320 天前
回复了 zhouhuab 创建的主题 程序员 反向代理后的端口数量限制
有的反代可能支持使用 Unix Domain Socket 或 Windows Named Pipe ,虽然我觉得最好的方案还是服务都能支持一个连接复用的网关模型。
328 天前
回复了 Mohanson 创建的主题 程序员 对于 WebAssembly 2.0 的一些看法
wasm 最初的目的是在浏览器中使用,加速编解码之类的,所以有 SIMD 是很顺理成章的。但是 wasm 应该支持特性探测,允许运行时实现不支持部分高级特性。
空安全可以通过高级语言实现,倒也不必一定要在 wasm 层面纠结,但是我是没懂为什么每种引用类型需要用一个单独的 table
333 天前
回复了 xiaopeng 创建的主题 分享创造 新上线小游戏: Sprunki, https://sprunki.im/
感觉是我第"10086"次看到这个类型游戏的变种发在 V 站?想知道是不是哪个项目拿这个游戏当例子了。。。
333 天前
回复了 qiayue 创建的主题 分享创造 预告一个小产品,让天下没有难上的站
有点类似 github pages ,但是我觉得你需要考虑下为什么 gitee pages 停止服务了
333 天前
回复了 TheBlind 创建的主题 分享创造 FinalShell 替代者 TShell
用了 Graalvm 真是意外,不过我看到 node-pty 以及任何 gyp 相关库也是会头皮发麻
@xiaofeilongyy555 C/C++的问题还是太容易写挂了,悬垂指针,或者内存 UAF,Double Free 就可能炸穿整个程序而且稍不注意就可能踩坑了。其他语言好歹 try catch 一下可能只是部分功能异常。
343 天前
回复了 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 以后会不会搬出类似的东西。
@nomagick Promise 不会 pending ,abort 的情况会直接传递到 onrejected ,抛出 AbortError 。在 taskMain 函数返回后会做 task 的清理工作。当然,如果 taskMain 返回后有其他继承同一 task 的 Promise 尝试访问 task 上下文会得到 undefined ,这算是一个小问题。
@nomagick 实现 Python 的 cancel 类似的机制,中断异步传递抛出异常,同步代码都是没法中断的,确实像你说的可以魔改为 await 为 iterator 模式, 但我写的这个方法可以不用魔改 js 就可以实现这个效果。
352 天前
回复了 Aspector 创建的主题 分享发现 最近看了一本讲 NT 内核开发过程的书
异步 IO 是很明显的需求,当然要是讨论 IOCP 和 select/epoll 那可能 IOCP 确实好一点,但说到底异步在没有实现无栈协程的 C/C++上不管怎么写都会比较难受
1  2  3  4  5  6  7  8  9  10 ... 18  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5675 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 03:08 · PVG 11:08 · LAX 20:08 · JFK 23:08
Developed with CodeLauncher
♥ Do have faith in what you're doing.