You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
JIT
我在代码中看到了JIT的实现目前还是挺粗糙的,就是通过 backend 调用 golang-asm 来进行编译,再通过 runtime 来获取 itab 表信息把生成的机器码作为函数进行调用。并且只做了 x86 架构的编译。然而 JIT 本身是一个可优化点非常多feature,甚至可以作为一个单独的 Go 扩展项目去做。
虽然搞出 Go 那帮 Google 大佬不见得喜欢 JIT 的设计,但是作为一个单独的语言扩展来搞说不定行得通。对于 Go 来说编译速度是不可妥协的底线,JIT的设计可能一定程度上违背这一点,但是作为一个类似于扩展的feature来说应该还OK。
除了增加别的架构支持之外,后面还会对 Go JIT 投入很多资源吗?
JIT
我在代码中看到了JIT的实现目前还是挺粗糙的,就是通过 backend 调用 golang-asm 来进行编译,再通过 runtime 来获取 itab 表信息把生成的机器码作为函数进行调用。并且只做了 x86 架构的编译。然而 JIT 本身是一个可优化点非常多feature,甚至可以作为一个单独的 Go 扩展项目去做。
虽然搞出 Go 那帮 Google 大佬不见得喜欢 JIT 的设计,但是作为一个单独的语言扩展来搞说不定行得通。对于 Go 来说编译速度是不可妥协的底线,JIT的设计可能一定程度上违背这一点,但是作为一个类似于扩展的feature来说应该还OK。
除了增加别的架构支持之外,后面还会对 Go JIT 投入很多资源吗?
SIMD 指令转换
当前的做法是把 LLVM 编译的指令,通过 python 脚本将其转换为可识别的格式被 runtime 调用,这样避免了 CGO 的开销,像是同一个二进制文件一样执行下去。这其实本质上也是一个超小型的编译器了,把这件事做成一个通用的 asm2plan9 好像并不是一件工程意义很大的事,因为 Plan9 格式现在似乎只有 Go 在用,minio 做过类似的事总之也放弃了。不过我还是想知道,这个小组件以后会专门去做吗,或者仅为某一类指令去做?