原帖地址:http://lab.polygonal.de/2009/03/12/hx3ds/
本人菜鸟一枚,翻译不妥之处请多多指点
就像标题显示的那样,hx3ds是从as3ds 衍生而来服务于haXe,在lib.haxe.org可以看到更多相关信息。
下面我们来看一下它的新特性:
l
有了数量级上的提速
l
现在的集合(collections)支持clone()和shuffle()操作选项
l
对象池框架(object pooling framework)
l
改进了 图,树,链表类
l 提供了虚拟内存管理API(一会还会介绍)
当其推出正式版后,我计划将其特性移植到as3ds。
最好的事情是hx3ds的运行速度比as3ds快的相当多。应用于应用程序“底层”的数据结构,对于其速度提升无疑是一个好消息,下面是一些相关数组操作对比统计数据:
hx3ds与as3ds的速度对比(数字越高越好)
这些不同点是由于haXe使用适当的整数操作码(integer opcodes),方法内插(method inlining)和泛型(generics)。简单的解释一下最后一点:现在你想写一个自定义的链表类并且利用vector和组合(composition)来存储数据。as的代码如下:
package {
public class MyList {
private var _data:Vector.<Object>;
...
}
}
你会被迫去使用动态Vector,因为你不知道用户要存储哪一种数据类型。这样做没有错,但是你就不能对其性能有任何盼头了。像平常一样,一些难以面对的现实:
与数组相关的读写执行速度(数字越高越好)
前面的事例用haXe编写是这样的:
class MyList<T> implements haxe.rtti.Generic {
private var _data:flash.Vector<T>;
....
}
...
var list:MyList<Int> = new MyList<Int>();
在实现Generic接口过程中,你告诉编译器:根据不同的参数类型创建对应的类(译者:感觉有点向映射),这样就就同时保障了安全和速度。编译后的结果是这样的
class MyList_Int implements haxe.rtti.Generic {
private var _data:flash.Vector<Int>;
....
}