Riceball's profileRiceball LEE personal we...PhotosBlogLists Tools Help

Blog


    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 = 300
        count +=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%倍】