原帖地址:http://lab.polygonal.de/2009/03/12/hx3ds/

本人菜鸟一枚,翻译不妥之处请多多指点


就像标题显示的那样,hx3ds是从as3ds 衍生而来服务于haXelib.haxe.org可以看到更多相关信息。

下面我们来看一下它的新特性:

l         有了数量级上的提速

l         现在的集合(collections)支持clone()shuffle()操作选项

l         对象池框架(object pooling framework

l         改进了 图,树,链表类

l         提供了虚拟内存管理API(一会还会介绍)

当其推出正式版后,我计划将其特性移植到as3ds

最好的事情是hx3ds的运行速度比as3ds快的相当多。应用于应用程序“底层”的数据结构,对于其速度提升无疑是一个好消息,下面是一些相关数组操作对比统计数据:


hx3dsas3ds的速度对比(数字越高越好)

这些不同点是由于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>;
    ....
}

 

posted on 2009-03-14 22:48  sungo  阅读(469)  评论(0编辑  收藏  举报