PDA

Просмотр полной версии : Типизированный массив - пути обхода


Psycho Tiger
06.12.2009, 16:48
Типизированных массивов насколько мне известно у нас нету.
Но если я пихаю в массив 1000 экземпляров класса, а потом мне нужно вызывать у каждого какой-нибудь метод, например, каждую секунду - тогда кастинг становится слишком ресурсоёмкой операцией, как вы отсюда выкручиваетесь?

Пример абстрактный, практической нужды в данный момент мне в этом нет.
Просто интересно.

iflamberg
06.12.2009, 16:57
не надо кастовать. делаем тупо arr[i]["funcName"](arg1,arg2,...);

wvxvw
06.12.2009, 17:03
На самом деле кастинг только ускоряет... типизированые массивы, т.е. Vector имееют некоторое преимущество при использовании простых типов, но они сильно недоделаны для того, чтобы их можно было по-нормальному использовать...
Если нужно что-то похожее на вектор только в 9-м плеере, можно наследоваться от массива и не делать класс динамическим + добавить функции типа getItemAt(index:uint):T setItemAt(index:uint, item:T):void + FD поддерживает (т.е. узнает) типизированый массив по комментариям типа:
var arr:Array/*int*/ = [1, 2, 3];
MTASC это поддерживал даже в AS2, немного не полностью, но все же...

iflamberg
06.12.2009, 18:49
нифига себе как можно. Пошел тестить.

wvxvw
06.12.2009, 19:48
А, да... в таком случае цикл перебирающий массив прийдется реализовывать в Java-style, что, конечно будет дольше чем обычный цикл... вобщем, лучше пользуйтесь HaXe - там нормальные генерики :)

iflamberg
06.12.2009, 20:26
слушай, откуда ты такие вещи узнаешь?

wvxvw
06.12.2009, 21:09
Про HaXe:
http://haxe.org/ref/type_params?lang=ru
Java:
http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html
А про скорость - ну, как-то сделал тест, померял :)

r_r_f_r
06.12.2009, 21:20
Добавлю я пожалуй ложку дёгтя в HaXe:
glaze (http://home.planet.nl/~borst595/glaze.html) написанный на AS3.
glaze (http://haxe.org/com/libs/physaxe) портированный на HaXe.
При просмотре HaXe кода замечено, что изменения относительно AS3 кода незначительны, вопрос, куда утекает процессорное время?:)

HaXe конечно хорош, но "иногда компилятору сносит голову" и можно вместо объявлений одной локальной переменной, получить две, как будто обфускатором прошлись:)

wvxvw
06.12.2009, 21:47
Ну, в любой программе есть баги... а в в AS3 *= не всегда работает, например, или метки циклов использованые внутри for-each / for-in. Кроме того, я, конечно не берусь судит, но, есть вероятность того, что похожий код не будет похоже работать... вобщем, к этому никто и не стремился, на сколько я понимаю...

Psycho Tiger
07.12.2009, 15:46
Если нужно что-то похожее на вектор только в 9-м плеере, можно наследоваться от массива и не делать класс динамическим + добавить функции типа getItemAt(index:uint):T setItemAt(index:uint, item:T):void + FD поддерживает (т.е. узнает) типизированый массив по комментариям типа:
Ммм... и это даст прирост скорости? Сомневаюсь же... Проверить надо на досуге.

wvxvw
07.12.2009, 16:11
Нет-нет, это - только для красоты, потому что внутри функции все равно прийдется использовать нетипизированый доступ, да еще и обращаться к методам суперкласса. Что да может, и скорее всего даст прирост в скорости - HaXe, или если уж совсем приспичит - теоретически наверное на уровне байткода можно и еще больше оптимизировать.