最快的J2me脚本引擎 SnakeScript1.1版本

JavaGG
 JavaGG
发布于 2008年10月29日
收藏 0
新增功能及特性
1.动态优先级设定
  可以在程序运行的时候动态改变某个脚本的优先级
2.动态实现脚本的加载、释放、暂停、恢复、结束等控制
  这些对脚本运行的控制已经可以写入不同脚本里,而不是主引擎去调用这些功能,
  这意味着RPG脚本分为主脚本和很多子脚本,主脚本负责在游戏运行过程中动态的
  管理所有的子脚本
  
3.自动堆栈平衡
  如果进行对主引擎函数的调用,则调用结束后无需手动传入参数个数来平衡堆栈,脚本引擎代劳,防止人为因素的错误发生
4.无限级别函数调用
  曾经用了一个函数追踪栈来记录函数之间的调用信息,因为初始化的追踪栈是有限的,所以只支持有限级别的函数调用(比如32级)
  现在通过更好的方法将函数调用信息记录到堆栈上,实现了无限级别调用,可以实现完全的地归操作,(受限与堆栈大小)
5.主引擎对脚本函数的异步及同步调用
  这个是实现起来最复杂功能(占用新版本开发的50%时间),可以在任意时候,任意位置来让主引擎去调用脚本里的方法,同步异步都支持
  不明白同步异步的同学去看脚本例子,内含介绍
6.脚本和脚本之间函数的同步和异步调用
  这也是新版本的核心功能,现在设计脚本RPG的模式就非常清晰了,比如一个npc脚本使用了一个爆炸道具,这个npc脚本就能通知附近的油桶脚本(函数调用)
  让油桶脚本播放爆炸的动画,很酷!!!
7.函数参数类型化声明
  在声明函数的时候无需像以前一样传入参数个数,而是传入参数名和希望的类型,这样可以让调用者明白传什么样的参数最合理
8.静态内存初始化
  一个朋友希望数组初始化能像C或java一样简单,而不是一个一个赋值,我想了一下觉得建议很好,立即实现这样初始化 比如 var xiaoxin[4] = {1, 2, "xiaoxin", 3, 5}
9.支持内嵌虚拟指令集
  我非常喜欢C++里的内嵌汇编模式,于是在脚本编译器上也实现了同样的功能
  _svm{
       PUSH    10
       PUSH    20
       POP    _T1
       POP    _T0
       ADD    _T0, _T1
       PUSH    _T0
       POP    _RetVal
  }
  一个简单的加法虚拟机指令代码,可以嵌入.ss脚本代码的方法里
10.struct结构支持
  还是应为很喜欢C代码的缘故,加入struct数据结构,这个没什么可说的,就是方便组织数据
  struct结构可以嵌套
  例:
  struct Anima{
     var data[20] 
  }
  struct Player{
     var x;
     var y;
     Anima ani;
  }
11.实现include指令
  可以编写静态库,功能和C的是一样,编译的时候查找并链接,我写了一个system库,主脚本如果要实现对虚拟机的控制需要#include预编译指令链接
12.优化脚本虚拟效率再提升30%
   测试机 SE w810
   SnakeScript1.0 每秒运行运行指令个数  24000条
   SnakeScript1.1 每秒运行运行指令个数  35000条
   看看在J2SE上的运行
   SnakeScript1.0 每秒运行运行指令个数  4584030条
   SnakeScript1.1 每秒运行运行指令个数  6276859条
   注意:
   影响效率的因素:1.多脚本并发执行,上下文切换有性能损失(5%)
                   2.脚本对主引擎API调用(host方法调用),性能损失(10%)
                   3.脚本之间的函数异步调用,性能损失(10%)
 
下载地址
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:最快的J2me脚本引擎 SnakeScript1.1版本
加载中
返回顶部
顶部