返回首页
最新
我制作了一个无CGO的Go SQLite驱动,通过将合并后的代码编译为Wasm,然后使用wazero(一个无CGO的Wasm运行时)加载结果。
为了编译SQLite,我使用了wasi-sdk,它使用wasi-libc,而wasi-libc是基于musl的。有说法称musl的速度比glibc慢,这在某种程度上是正确的。
musl在size_t上使用SWAR来实现string.h中的各种函数。这是可以的,但在Wasm上,size_t仅为32位。
我发现使用Wasm的SIMD128实现其中一些函数可以使它们的速度提高约4倍。
其他函数甚至不使用SWAR;重新实现<i>那些</i>函数可以使它们的速度提高16倍。
平滑排序也难以发挥其应有的作用;Shell排序似乎既简单又快速,同时也避免了递归、内存分配和可寻址栈。
我发现使用SIMD内在函数(而不是SWAR)更容易避免未定义行为,但代码显然需要更多的审阅。
有关x86-64和Aarch64的一些基准测试,请参见此链接:<a href="https://github.com/ncruces/go-sqlite3/actions/runs/14516931864">https://github.com/ncruces/go-sqlite3/actions/runs/145169318...</a>
你们知道有没有插件/扩展或系统,可以在浏览器中使用本地终端吗?特别是对于使用 vim/neovim 的开发工作。我几乎所有的工作都是在浏览器或终端中进行的,所以在“浏览器终端”中完成最后的工作,而不是切换窗口,会非常酷。