Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=7)
-   -   наконец, откопали исходные коды встроенных обьектов AS :) (http://www.flasher.ru/forum/showthread.php?t=26260)

ish 25.01.2002 10:16

наконец, откопали исходные коды встроенных обьектов AS :)
 
Вложений: 1
с чем вас и поздравляю :)

товарищ Casper Schuirink, с мэйл-листа флэшкодеров, сообщает про инициализацию встроенных обьектов при запуске плэйера.
Все обьекты условно делятся на три части, обьекты оставшиеся "в наследство" от предыдущих версий (функции startDrag, tellTarget, etc) , обьекты созданные посредством стандартных операций AS, и наконец обьекты созданные на основе "родных" кодов, т.е. через ф-ию ASNative.

так вот, ниже приведен весь сорс инициализации, то есть, так, как это происходит на самом деле :) очень любопытно.

Дениска 25.01.2002 20:15

теперь ясно почему такие тормоза...

john 26.01.2002 05:05

однозначно tell target - форева...

шутка,

не поймите меня превратно,

Amadeus 26.01.2002 16:31

Вот бы на Флейме кто-нибудь рассказал -
откуда взялось и что из этого следует.

ish 26.01.2002 16:46

откопать просто, есть проги которые работают с памятью, вот и просканяли момент инициализации плэйера, а следует то что очч тормознуто все реализовано, имхо "родная" реализация тех же функция работала бы намного быстрее, но тут видимо опять сэкономили на размере плагина :)
чтож ждем релиза шестерки...

Altaev 26.01.2002 18:14

Гурманы!:)

А пятерочную распечатку не подкините?:)

ish 26.01.2002 18:23

Цитата:

Оригинал написал(а) Altaev
Гурманы!:)

А пятерочную распечатку не подкините?:)

а мы про что? или я не понял :)

Altaev 26.01.2002 20:46

Блин, я думал, что это из 6-го:)

2ish
Тогда обьясни мне плиз, что за зверь ASNative?

ish 26.01.2002 21:51

обьясняю. все встроенные обьекты AS версии пять и выше, имеют не "родной" характер. так вот, макромедия создала только одну новую, по настоящему встроенную функцию - ASNative, остальные же, так называемые, системные обьекты, представляют собой стандартный набор операций из методов младших версий (например tellTarget, тут макромедия просто не стала их переписывать, а оставила "как есть"), обьектов того же AS (см. сорсы), и как раз функции ASNаtive. кто программировал на Java поймет сразу :)

с помощью ASNative осуществляется доступ к "таблице" "родных" методов плейера пятой версии. например ASNative(100,4) вернет функцию которая известна нам как ф-ия trace.

поэтому весь движок AS пятерки, построен на самом же AS :)
опять же кто програмировал в Java, поймет


может немного непонятно, но на самом деле все просто :)

УильямБрэдберри 27.01.2002 00:55

круть =)

john 27.01.2002 00:59

Думаю в шестерке тоже самое будет.....
хотя все равно будет быстрее работать.

john 27.01.2002 01:01

Ускорение за счет улучшения ASnative функций :)
Во всяком случае в бете есть и ASnative и ASSetPropFlags....
мне во всяком случае такая архитектура вполне устраивает.

john 27.01.2002 01:04

Цитата:

меня во всяком случае такая архитектура вполне устраивает
лукавлю конечно.... :rolleyes:

но все равно в ней есть некоторые плюсы...

yurailHome 27.01.2002 01:35

6 rabotaet bistree..
provereno..........
zhdu.. nedozhdus......

Ales 27.01.2002 07:41

Вопрос: Работает ли плеер с АСНейтев кодами быстрее чем со стандартными операторами?
ДА или НЕТ?

ЗЫ
Уклончивые ответы я уже слышал, нужна конкретика :)

Ales 27.01.2002 07:54

ЗЫЫ
почему спрашиваю, да потому что слышал разные ответы, но сам уверен что этот интерпритатор при работе с чистыми вызовами АСНеитив, без операторов, должен работать быстрее. Может не заметно, но при мега расчетах трехмера(предположим) разница должна быть ощютимой. ИМХО

ish 27.01.2002 10:28

Ales, хм, как бы это.... ну вот смотри:
x=function() {
// some code
}
y=x
что быстрее выполнится x или y? правильно без разницы, так как функция одна и та же

или

x=function() {
//some code
}
y=function() {
//some code
some_var=x(some_args);
//some code
}
в этом случае явно быстрее выполнится функция у.

мы сейчас говорим о разнице в доли милесекунд. но, вот опять пример:
x=ASNative(200,0)(-1) // функция ака Math.abs

тут смотри сначала выполнится ф-ия ASNative, а потом результирующая ф-ия, то есть та которую вернет ASNative.

далее x=Math.abs(-1), тут тоже функция выполнится не сразу, сперва будет проинициализирован обьект Math.

поэтому сравнивать нужно "чистые" функции:
x=Math.abs
y=ASNative(200,0)

так, вот что быстрее? x или y
есть простой способ проверить:
Код:

arg=-1
func1=Math.abs
func2=ASNative(200,0);

x=getTimer();
for(i=1;i<1000;i++) {
g=Math.abs(arg);
}
x=getTimer()-x;
trace("Math.abs: "+x);

x=getTimer();
for(i=1;i<1000;i++) {
g=ASNAtive(200,0)(arg);
}
x=getTimer()-x;
trace("ASNative(200,0): "+x);

x=getTimer();
for(i=1;i<1000;i++) {
g=func1(arg);
}
x=getTimer()-x;
trace("func1: "+x);

x=getTimer();
for(i=1;i<1000;i++) {
g=func2(arg);
}
x=getTimer()-x;
trace("func2: "+x);

на тысячу проходов разница в одну-две милисекунды, спишем это на погрешность.

но это для функция являющихся прямым аналогом ASNative(x,x)

пример обратный:

Код:

function Number (v) {
        v = ASnative(3, 1)(v);
        if (!ASNew()) {
            return (v);
        }
        this.value = v;
        ASSetPropFlags(this, null, 7);
    }

результат полученный нами при выполнении ASNative(3,1)("2") и Number("2") будет идентичный, но что быстрее выполнится? конечно первое.

повторюсь, что мы говорим о очень малых разницах в выполнении.

ish 27.01.2002 10:44

2john судя по всему макромедия и не собирается отступать от такой конструкции, я думаю что улучшения скорости выполнения кода будут достигнут за счет модернизации интерпритатора байткода :)

ish 27.01.2002 10:50

да кстати ASNew тоже полезная штучка :) очень удобно если надо создать конструктор и функцию с одним именем.

Код:

test=function() {
if(!ASNew()) {
trace("you call test function");
return;
}
trace("you create new test object");
}

x=new test();
y=test();


john 27.01.2002 16:47

2ish

да полезная функция факт... но думаю лучше ее не пользовать, чтобы не делать лишних действий, функции - функциево, конструктору - конструкторово :)

в варианте с Number и String - это понятно, либо объект либо литерал, а так.....

второй момент, насколько я посмотрел код инициализации, ссылки на методы в большенстве определяются сразу (при начале работы плейера), поэтому как бы методы имеют прямые ссылки и к ASnative уже не обращаются, поэтому и ускорения-замедления никак не может быть...

john 27.01.2002 16:56

А вообще то радует то что возможностей в AS для ООП куда больше чем в JS 1.5

А какая красота в шестерке будет ....

ish 27.01.2002 17:05

Цитата:

Оригинал написал(а) john
2ish
второй момент, насколько я посмотрел код инициализации, ссылки на методы в большенстве определяются сразу (при начале работы плейера), поэтому как бы методы имеют прямые ссылки и к ASnative уже не обращаются, поэтому и ускорения-замедления никак не может быть...

я это и имел в виду

Ales 27.01.2002 18:40

2ish:
Мда. Перечитал. Подумал. :) Еще раз подумал. :)
Спасибо. Пока вопросов нет:)

Смольный (Smolniy) 27.01.2002 20:38

Уродство. В смысле, идея разделить API и функции вообще продуктивна, но только в том случае, если программерам разрешено использовать только API. Сам факт того, что "простой флашер" может использовать напрямую ASNative разрушает всю концепцию "разделенности". В итоге мы видим только еще одну "надстройку", что не увеличивает производительность. Здесь справедливо заметили, что уменьшение скорости происходит "лишь немного", но
а) флаш - ИНТЕРПРЕТАТОР
б) бардак для них самих. Факт: они пишут одну грандиозную ф-цию ASNative, где под номерами перечислены все функции Flash. Довелось мне работать с такой "безличной" структурой (СУБД для одной бо-о-о-ольшой страховой компании), и после 2-х лет самоимения я от такой технологии отказался.
в) приключились непонятные ограничения (напр. попробуйте сделать переменную с именем "o" - буква мОлОкО-латинское-маленькое, спасибо WB)
г) здесь немного, там немного - глядишь и набежало. Есть три хороших правила:

1. Бережливость.
2. Бережливость к сбереженному.
3. Бережливость к бережливо сбереженному.
(с) Вайнеры
К тактам ЦПУ это также относится.

ish 29.01.2002 16:10

Цитата:

Оригинал написал(а) Смольный (Smolniy)

в) приключились непонятные ограничения (напр. попробуйте сделать переменную с именем "o" - буква мОлОкО-латинское-маленькое, спасибо WB)

а какие тут ограничения?


а вобще, имхо, удобно, в первую очередь для нас же самих. зная изначально весь сорс обьектов плюс значения "таблицы" встроенных функций, определять AS "под себя" на каждый конкретный случай.

john 29.01.2002 16:16

Цитата:

они пишут одну грандиозную ф-цию ASNative, где под номерами перечислены все функции Flash
Не совсем так, фукнция только берет из массива ссылки на функции которые созданы на более низком уровне,
думаю структура там не такая "плоская" :)

Задача только передать ссылку на более высокий уровень ...

Смольный (Smolniy) 29.01.2002 18:19

2John
т.е. ASNative - еще одна надстройка. :):):)
Не бред ли? Если так, то ММ меня удивляет.
Насчет плоскости - не знаю, брат, не знаю. Посмотри как они константы вводят (Пи etc), это иначе как "наиплоскейшая плоскость" не назовешь. ;)

2ish
>зная изначально весь сорс обьектов плюс значения
>"таблицы" встроенных функций, определять AS "под
>себя" на каждый конкретный случай.

Если я знаю таблицу встроенных ф-ций, API мне нафиг не нужен, ибо это макросы, по большому счету.
Чего определять-то для конкретного случая? Ф-цию перегрузить я и так могу. Или сделать свою, что еще проще и красивше. Сорс объектов полезен, ИМХО, только из-за того, что там можно найти что-нить недокументированное. :)

>а какие тут ограничения?

Ну... если сделать текстовое поле, к нему привязать переменную "o" и не делать начальное обнуление, то при обработке этого поля (если юзер туда ничего не вбил) там обнаруживалось какое-то значение, Object. А вообще, ММ ламмахи - надо было просто сделать в конце инициализации delete всех временных объектов. :) Или использовать их временные варианты var

ish 29.01.2002 18:35

Цитата:

Если я знаю таблицу встроенных ф-ций, API мне нафиг не нужен, ибо это макросы, по большому счету.
да я о том же.
но, имхо, удобно в плане создания своего API. без лишних наворотов.
Цитата:

Сорс объектов полезен, ИМХО, только из-за того, что там можно найти что-нить недокументированное. :)
согласен :)
Цитата:

Ну... если сделать текстовое поле, к нему привязать переменную "o" и не делать начальное обнуление, то при обработке этого поля (если юзер туда ничего не вбил) там обнаруживалось какое-то значение, Object.
это давно известный факт. но причем тут ограничения!?
этот обьект временный и после инициализации API больше не используется, ошибка ММ в том что она забыла его удалить в конце
Цитата:

А вообще, ММ ламмахи - надо было просто сделать в конце инициализации delete всех временных объектов. :) Или использовать их временные варианты var
точно :)

Amadeus 30.01.2002 13:50

2Смольный:
>> Посмотри как они константы вводят...

А как грамотно надо?

Ales 30.01.2002 18:11

2Amadeus: Грамотно , константы надо расчитывать. В курсе лекций по высшей математике есть большая теорема для рассчета числа "пи".

Amadeus 30.01.2002 19:08

И в разных условиях Пи оказывается разным? :confused:

Baltika 30.01.2002 19:15

i potom nazyvaetsya peremennoi :D

Смольный (Smolniy) 30.01.2002 19:30

"Грамотно" - это вкомпилировать константу в exe-шник. Может, рассчитать, но в exe-шнике, т.е. в системных кодах. Плееры-то у нас все-таки системно-ориентированные, т.е. откомпилированные под конкретную ОС. Или опросить системные библиотеки - на в жизнь не поверю, чтоб нигде в системе гарантированно не было прописано число Пи. Гхоссподи, любой совр. проц имеет матсопроцессор, там эти константы на железном уровне прописаны. А плеер все-таки часть IE, след. часть ОС.

Amadeus 31.01.2002 19:47

Теперь надо бы написать руководство
по настоящему ООП во флэше.

john 31.01.2002 21:35

2Amadeus

слудущая версия покажет, что настоящее а что нет... :)

Amadeus 01.02.2002 11:40

А вот когда она, новая-то версия появится?
И еще когда ею хоть половина юзеров обзаведется...
А творить для кастомеров сейчас надо.

О быстродействии и всем таком,
а может быть и объекты, Color и Sound тоже не хороши?


Часовой пояс GMT +4, время: 14:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.