写点什么

凹语言执行速度比 Go 快一倍,体积百分之一

作者:chai2010
  • 2024-10-10
    浙江
  • 本文字数:1198 字

    阅读完需:约 4 分钟

凹语言执行速度比Go快一倍,体积百分之一

凹语言还在开发状态的 v0.17.0 版本针对后端输出的 wat 文件做了体积优化。以递归版本的 Fib 为例,输出的体积是 Go 的百分之一(优化后是体积是前个版本的三分之一),执行速度快一倍。详细请参考凹语言主库下的 tests/bench/fib 目录文档。

Fib 测试代码

凹语言的优点可以通过一个简单的 Fibonacci 示例来说明。下面是凹语言和 Go 两种语言中实现的 fib 函数。


凹语言代码:


func init {  println(fib(46))}
func fib(n: int) => int { aux: func(n, acc1, acc2: int) => int aux = func(n, acc1, acc2: int) => int { switch n { case 0: return acc1 case 1: return acc2 default: return aux(n-1, acc2, acc1+acc2) } } return aux(n, 0, 1)}
复制代码


Go 代码:


package main
func main() { println(fib(46))}func fib(n int) int { var aux func(n, acc1, acc2 int) int aux = func(n, acc1, acc2 int) int { switch n { case 0: return acc1 case 1: return acc2 default: return aux(n-1, acc2, acc1+acc2) } } return aux(n, 0, 1)}
复制代码

测试结果

执行 make 输出结果如下:


$ makewa -vWa version v0.17.0
go versiongo version go1.21.0 darwin/amd64
wasmer -Vwasmer 4.3.7
wa build -optimize -target=wasi -output=fib_wa.wasm fib_wa.waGOOS=wasip1 GOARCH=wasm go build -o fib_go.wasm
du -sh fib_*.wasm1.3M fib_go.wasm 12K fib_wa.wasm
time wasmer fib_wa.wasm1836311903 0.12 real 0.02 user 0.03 systime wasmer fib_go.wasm1836311903 0.26 real 0.04 user 0.05 sys
复制代码

和 TinyGo 的对比

TinyGo 是 0.33.0 版本,编译时关闭了不必要的特性。


$ make tinygotime tinygo build --target wasm -o fib_tinygo.wasm -scheduler none --no-debug fib_go.go        0.95 real         0.89 user         0.20 systime wa build -optimize -target=wasi -output=fib_wa.wasm fib_wa.wa        0.08 real         0.06 user         0.01 syswasm2wat fib_tinygo.wasm -o fib_tinygo.watdu -sh fib_*.wasm1.3M    fib_go.wasm8.0K    fib_tinygo.wasm8.0K    fib_wa.wasmtime wasmer fib_wa.wasm1836311903        0.03 real         0.01 user         0.01 systime wasmer fib_tinygo.wasm1836311903        0.02 real         0.01 user         0.01 sys
复制代码


凹语言编译速度是 TinyGo 的 10 倍,输出的 wasm 体积和 TinyGo 一样都是 8KB,凹语言输出的 wasm 执行时间比 TinyGo 稍慢。

总结

  • 凹语言是 v0.17.0 版本, Go 是 1.21.0 版本

  • 凹语言输出的 wasm 体积为 12KB, Go 语言输出 1.3MB 大小的 wasm, 凹语言是 Go 的 1/100 大小(优化后是体积是前个版本的三分之一)

  • 凹语言执行时间 0.12, Go 的执行时间是 0.26, 凹语言是 Go 的 1/2 执行时间

用户头像

chai2010

关注

还未添加个人签名 2018-08-05 加入

凹语言联合发起人

评论

发布
暂无评论
凹语言执行速度比Go快一倍,体积百分之一_golang_chai2010_InfoQ写作社区