Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Механизм реального наследования в AVM2 (http://www.flasher.ru/forum/showthread.php?t=121527)

chingachgoog 17.02.2009 20:36

Механизм реального наследования в AVM2
 
Буду рад любой информации по теме
(собственно, что делает компилятор, когда видит слово class?)

Что за управление наследованием через Класс наследований?

PS
Работа компилятора для AS2-кода описана тут
Соответственно механизм наследования основан на прототипах.
Подобный фундаментальный разбор наследования хочется получить и тут для AVM2.

wvxvw 17.02.2009 21:00

Информация для изучения:
Компилятор:
http://opensource.adobe.com/svn/open...k/modules/asc/
Немного полезной инфы по компилятору:
https://developer.mozilla.org/En/Tam..._Documentation
Спеки SWF:
http://www.adobe.com/devnet/swf/

В двух словах, примерно так: если в АС2 все пользовательские классы были функциями прописаными где-то в _global, то в AS3 - это "запечатанные" объекты - объекты изменеие набора свойств которых в процессе работы вызывает ошибку (это если классы не динамические - по умолчанию), и находяться они не в _global, а в неймспейсах-пакетах. Я думаю, что проще всего это представить через flash.utils.describeType() - это что-то вроде "побочного эффекта" внутренней валидации объектов, которую использует плеер - т.е. describeType представляет вам полный перечень того, с чем плеер будет сравнивать экземляр вашего класса.

BlooDHounD 17.02.2009 22:42

@wvxvw
1. http://opensource.adobe.com/svn/open...k/modules/asc/ - это не комплятор, а парсеры байт- и исходного кодов.
2. https://developer.mozilla.org/En/Tam..._Documentation - тут инфа не по флэшовому компилятору. они оооочень по разному работают.
3. flash.utils.describeType - это далеко не полный перечень.

wvxvw 17.02.2009 23:43

Да, приватные методы / свойства не показываются, а предложи более полный перечень?
А что по твоему такое компилятор, если не парсер + упаковщик?
ASC в Тамарине и в флексовом SDK один и тот же... в этом как бы вся фишка... просто существуют пакеты flash.* которые компилируются во флешевые проекты, а в Тамарин, пожалуй что только builtin.abc, но наверняка вся задумка в том, чтобы можно было добавлять свои, но я не вникал, так что тут могу ошибаться... Ну и естественно, информацию по остальным флешевым / флексовым компиляторам нужно искать в другом месте :) Но по MXMLC / COMPC - легко найти, а по asc_authoring.jar кроме этого http://osflash.org/flashcoders/the_flash_9_compiler , пожалуй что ничего и нет...
Лишь бы спорить :)

BlooDHounD 18.02.2009 00:35

Олег, ты хоть бы для видя по сторонам посмотрел. там исходники анализаторов ( лексического и семантического ), которые является презервативами одеваемыми на компилятор, и в случаи чего могу быть сменены. компилятор занимается, в нашем случаии, сборкой в байт-код, а не парсингом в промежуточные данные. и он лежит в соседнем проекте. вместе с компилятором лежит и оптимизатор, который, почему-то, сменным презервативом не является.

что касается тамарина, то хотя бы код сравнил бы. чего с тобой спорить, если ты совсем не в теме?

P.S: про describeType ... на http://livedocs.adobe.com/flex/3/lan...ge-detail.html - развивайся.

wvxvw 18.02.2009 16:09

Смотри, я согласен с тем, что ты говоришь, но вопрос был такой:
"что делает компилятор, когда видит слово class?" Тогда, по-твоему ответ будет: ничего, потому что он его не видит, а получает эту информацию от анализатора? Правильно? Ну и чем такая информация поможет?
А по поводу Тамарина - я действительно не в курсе, сорь, из того, что читал, я понял, что задумка как раз таки была в том, чтобы использовать один и тот же компилятор.

ЗЫ. Спасибо за ссылку, действительно не знал.

BlooDHounD 18.02.2009 16:48

wvxvw, ну так, то он же её и получает :) но чуть позже, и совсем не в том проекте, что ты дал. а вообще он создаёт дефинишен-описание в байт-коде. кстати .. на самом деле, классы лежат в глобале :) просто к нему доступа нету.

chingachgoog 18.02.2009 19:50

Вложений: 1
Actionscript 3.0 and Performance Tuning
Адобовцы пишут:
Код:

class A {
        var a:Number = 3.14;
        var b:String = 'a string';
        var c:int = -1;
       
        public function A() {
                trace('Constructor');
        }
       
        public function method(){
                trace('A.method');
        }
}

What that compiles to in AS2...
Код:

_global.A = function () {
        this.a = 3.14;
        this.b = 'a string';
        this.c = -1;
        trace('Constructor');
}
_global.A.prototype.method = function () {
        trace('A.method');
}

Ну почти верно (не указано, что это из инитклипа записывается), вот тут бы адобовцам и рассказать (показать) что тот же самый код в AS3 на самом деле делает, но вместо этого непонятная картинка:

wvxvw 18.02.2009 21:06

А классы они как бы в АС3 не создаются в рантайме... =/ они уже компилируются готовыми, так что кода аналогичному примеру на АС2 быть вообще не может. Картинка только показывает как и откуда компилятор на этапе создания класса будет искать его методы и свойства.

chingachgoog 18.02.2009 21:21

Вложений: 1
Цитата:

Сообщение от wvxvw (Сообщение 799489)
Картинка только показывает как и откуда компилятор на этапе создания класса будет искать его методы и свойства.

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

Цитата:

Сообщение от wvxvw (Сообщение 799489)
А классы они как бы в АС3 не создаются в рантайме... =/ они уже компилируются готовыми, так что кода аналогичному примеру на АС2 быть вообще не может.

Ну хорошо: они сразу записываются в бинарный массив .abc
Но как тогда действует оператор new()?
И можно ли поиметь доступ к .abc как к обычному бинарному массиву (наверное, что-то вроде "прочитать самого себя")?


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

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