推文详情
avatar
@sh1marin@dabr.ca
turtle 好难理解啊...卡在 Shell 这个类型上了...
查看详情
0
0
1
avatar
@sh1marin@dabr.ca
啊还是得看源码,看完大概有点点摸到了...
查看详情
0
0
0
avatar
@sh1marin@dabr.ca
草,我 debug 了半天没看懂为什么在 `Shell` Monad 里面的 printf IO 不工作,然后突然发现自己要 printf 的东西一闪而过,就被下一个 process 清空了,原来是 stdout inherit 的问题,好坑啊。
查看详情
0
0
1
avatar
@sh1marin@dabr.ca
思索,怎么感觉不太对劲啊....为什么输出会被 execvp 出来的程序清掉呢.....琢磨一下
查看详情
0
0
1
avatar
@sh1marin@dabr.ca
我操!原来是 nix 的问题!忘记加换行符 printf,接下来直接 execvp nix 的话,nix 直接把 stdout 清空了。而加了换行符就没这个问题了。感觉它应该自己新起一行啊😡
查看详情
0
0
1
avatar
@sh1marin@dabr.ca
好,我的 neovim treesitter plugin bump script 终于 refactor 到看着比较舒服了。
查看详情
0
0
0
avatar
@sh1marin@dabr.ca
草,试着让它 async 起来,结果 nix 直接在 stdout race 起来了。
查看详情
0
0
0
avatar
@sh1marin@dabr.ca
开始尝试用 chan,五年前写 Golang 的回忆又涌上来了
查看详情
0
0
0
avatar
@sh1marin@dabr.ca
好!终于用 Haskell 搓出来并发 bump 了!接下来要搞干净并发时的 stdout
查看详情
0
0
0
avatar
@sh1marin@dabr.ca
唉,就卡在一个 thread-safe & non-interleaving 的 print 上了。目前有个 concurrent-output 的库可以做这个事情,但是它也做了很多其它事情,不是一个足够简练的库。自己手写的话其实就还是两个路子,一个 MVar 的 mutex 锁,或者 channel。实现了一版走 channel 的,感觉太过于丑陋:所有调用 print 的子线程函数都要接受一个 channel 参数。我觉得这样去写代码不合理。如果用 IORef 去包一个全局 atomic 锁倒也在别的语言里常见,但在 Haskell 里可能不算 best practice。纠结了很久,群友推荐了一个 Monad Transform 的路子,我去学一下。
查看详情
0
0
1
@sh1marin@dabr.ca
0/482
加载中