| Riceball's profileRiceball LEE personal we...PhotosBlogLists | Help |
|
November 02 世上最快的脚本引擎与TurboScript原来以为Luna 是最快的,我还在为比Luna快若干倍沾沾自喜,现在知道错了,大大的错了,世界上最快的脚本引擎应该是 EUPHORIA 。
它主要被用于游戏中的脚本引擎,最近开放源码了。
它的解释器采用的是和我的TurboScript类似的脚本执行机构!但是在它的解释器中似乎没有提供中断、暂停的渠道,除非是编译的时候插入调试指令,而TurboScript则在每执行一个指令前都要检查是否需要停止。我想这是它比TurboScript快的原因吧,不过它的核心代码实在是太难读了,根本不是人读的,注释又少。直接虚拟指令运行效率比较,TurboScript比它慢0.25倍。不过值得高兴的是它的调用子过程的效率比TurboScript 慢太多了,调用子过程的效率TurboScript比它高70%倍。下面是我的测试方法:
全部采用 QueryPerformanceCounter 高精度计数。
x86汇编:
;计时开始
MOV EBX, 300 BB2C010000
ADD EBX, 300 81C32C010000 ..... --- 总计 2017 次 ADD EBX, 300 81C32C010000 ;计时结束
结果运行时间:60
EUPHORIA 加法指令顺序执行效率测试脚本:
--计时开始 count = 300count +=300 ..... --- 总计 2017 次
count +=300
--计时结束
结果运行时间:74 【难以置信,只比汇编慢18.9%倍】
TurboScript ASM 脚本:
(计时开始)
300
300 +
..... (总计 2017 次) 300 +结果运行时间:98 【比汇编慢38.8%倍】
子过程调用效率测试
x86 汇编 子过程调用效率测试脚本:
function add(a,b: integer): integer; asm mov EAX, a add EAX, b end; --计时开始
asm mOV EAX, 300 MOV EDX, 300 CALL ADD ..... (总计 2017 次)
MOV EDX, 300 CALL ADD
--计时结束
结果运行时间:126
EUPHORIA 子过程调用效率测试脚本:
function iAdd(integer a, integer b) return a+b end function --计时开始 count = 300 iAdd(count, 300) ..... --- 总计 2017 次 iAdd(count, 300)--计时结束 结果运行时间:522 【比汇编慢了近75.9%倍,比TurboScript 近调用慢近70%倍】 TurboScript 子过程调用效率测试
: Add +; --计时开始 300 300 Add ..... (总计 2017 次) 300 Add--计时结束 结果运行时间:157【只比汇编慢19.7%倍】
|
|
|