有 Rust 绑定库的脚本语言不多,即使有绑定也都很久没有维护了,看了半天能用的只有一个 Wren。
顺手测了下 JavaScript 的,在火狐浏览器里。
Wren 测试是下载官网的 Wren 0.4.0 cli 二进制包。
没必要跟 Rust 比了,只跟纯 Lua 和 Python 实现比,Lua 和 Python 的代码依然用的是去年的。另一台电脑测的,所以重新跑测了下作为参考,依然是节能模式跑 3 次,每次循环 5 次 fibonacci(32)
。这台电脑平时编译 Rust 比那一台的快,但是跑 Fibonacci 还变慢了……
我看 Wren 的数字类型只是一个双精度浮点数,没有整数类型,而 Lua 从 5.3 开始是支持整型的,所以测完 Lua 的斐波那契我还在数字后面都加了个 .0
试了下,没有区别。
JavaScript 测试代码:
function fib(n) {
if (n < 2) {
return n;
}
return fib(n - 2) + fib(n - 1);
}
var start = Date.now();
for (i=0; i<5; i++) {
fib(32);
}
console.log("elapsed:", Date.now() - start);
Wren 测试代码版本一:
class Fib {
static get(n) {
if (n < 2) return n
return get(n - 1) + get(n - 2)
}
}
var start = System.clock
for (i in 1..5) {
Fib.get(32)
}
System.print("elapsed: %(System.clock - start)")
Wren 测试代码版本二:
var Fib = Fn.new {|n|
if (n < 2) return n
return Fib.call(n - 1) + Fib.call(n - 2)
}
var start = System.clock
for (i in 1..5) {
Fib.call(32)
}
System.print("elapsed: %(System.clock - start)")
elapsed: 3.411
elapsed: 3.551
elapsed: 3.401
elapsed: 3.561
elapsed: 3.547
elapsed: 3.537
elapsed: 1.688000
elapsed: 1.666000
elapsed: 1.532000
elapsed: 2.189000
elapsed: 2.089000
elapsed: 2.027000
elapsed: 4.375
elapsed: 4.296875
elapsed: 4.40625
elapsed: 8989
elapsed: 8987
elapsed: 8994
封装之后即使运行纯 Lua 代码也会有性能损失。
Wren 官网上的 Performance 章节显示 Wren 跑斐波那契数列的的性能高于 Lua 5.2.3,但我实测 Wren 0.4.0 的性能介于 Lua 5.4 和 Python 3.9 之间。
老老实实用 Lua。