Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   ActionScript - полная лажа" или "Как не надо делать интерпретаторы" (http://www.flasher.ru/forum/showthread.php?t=36761)

infinity 05.09.2002 18:01

ActionScript - полная лажа" или "Как не надо делать интерпретаторы"
 
итак, набралось у меня такОго про это АС :eek:
буду рад выслушать все за и против по этому вопросу,
и высказать свои недовольства (их-то и набралось на целый топик). :o

OverLord 05.09.2002 18:07

ты сначала выскажи свои против :)
а потом все остальные выскажут свои за :)

infinity 05.09.2002 18:17

ок начнем с простого:
массивы
Код:

a[1]="xxx";
trace(a["1"]); // xxx

это значит, что ключи массива - строки,
а еще это значит - тормоза! :p

добавим сюда объекты:
Код:

a.shit="xxx";
trace(a["shit"]); // xxx

это значит, что свойства объекта также определяются,
а еще это также значит - тормоза! :D

если вы мне выскажете агрументы ЗА такую лажу, то я вам еще
на че нить ткну ;)

ЗЫ. токо не нада говорить - это так по спецификации нада :D

infinity 05.09.2002 18:18

да, кстати о "гибкости" кода тоже мозги не пудрить :p

infinity 05.09.2002 19:32

ну дак что? все безумно любят ЭкшнСкрипт, просто торчат от него, а в защиту сказать нечего?
никаких положительных аргументов? нечем опровергнуть мои?
:D
вот это действительно лол :D :D :D

sapiens 05.09.2002 19:57

какая альтернатива???? :confused:

Alien Life Form 05.09.2002 20:19

Ситуация:

Есть переменная (напрмер _root.bla) в которую помещаются имя мувика который надо играть (допустим в руте), и как более правильно можно реализовать обращение к этому мувика, если обычно можно обратиться

_root[_root.bla].gotoAndPlay(some_farme);

???

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

(eval в качестве удобной отмазки не катит :D )

JeeP 05.09.2002 20:50

Ндааааааааааааааа, затеял ты топик!

Сначала выскажу СВОЕ мнение:

я б не сказал что безумно люблю АС, но мне нравится его:
- относительная простота
- гибкость кода
- интуитивность
- да, и еще он мне "помогает" деньги зарабатывать!

Теперь о главном, но по порядку.

Я так понимаю, что тебе хотелось чтоб АС был похож скажем на С или Delphi (к чему тогда это: это значит, что ключи массива - строки, а еще это значит - тормоза ).

Наверное ты знаешь ;) , что по большому счету языки программирования делятся на компилируемые(С, Delphi) и не компилируемые(JavaScript, VBScript, AS), тоесть скриптовые.

НУ что, это уже о чем то говорит? НЕТ! тогда идем дальше!

Наверное ты знаешь ;) , что АС по сути своей является ребенком ECMAScript, и естественно похож на JavaScript.

Намек секешь?

...
немного отвлекусь:

Цитата:

Оригинал написал(а) infinity
Код:

a[1]="xxx";
trace(a["1"]); // xxx

...это значит, что ключи массива - строки...

я тебя огорчу( :( ) - это не значит что ключи массива - строки(хотя массив может быть именованным),
а значит что в АС есть автоматическое преобразование типа данных.
Отсюда вывод - в АС(и иже с ним) нет объявления типа данных, более того тип данных может меняться динамически!
В отличии от, скажем С, где тип переменной объявляется зараннее, и остается неизменным!

...
вернемся!


Логичнее тогда спросить: почему JavaScript сделали таким, какой он есть? Ведь в нем, по определению, нет объявления типа переменных, а именно это и является ТВОИМ камнем преткновения!


ЗЫ: Я думаю, ты не ругаешься из-за того, что в кастрюле не жарят мясо, а в сковороде - не варят суп! :p :p :p

Nox Noctis 05.09.2002 20:52

2infinity
чушь.

те примеры, которые ты привел - никоим образом не иллюстрируют "лажу"... они иллюстрируют лишь предопределенные особенности...

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

if ("1">0) { trace (" все идет по плану :) "); }
сработает, хотя мы сравниваем строку с числом...

a = "1", a++
trace(a);
тоже сработает нормально - из-за автоматического приведения типов.

второе:
ты объявил свойство объекта, а потом его протрейсил, использую адресацию ассоциативного массива...
ЧТО тебя удивляет, если не секрет ?

и главный вопрос.... где тормоза ? :)) аа ? :)
можешь объяснить что ты имеешь в виду :)
(в байткод загляни, к примеру... чтоб проиллюстрировать эти самые тормоза :P)

у экшнскрипта туева хуча багов и несуразностей...
ты пока не привел ни одной :))

infinity 06.09.2002 11:29

УРА! как я и ожидал на мои резкие слова наконец то откликнулся народ! зацепило поклонников :p

теперь по теме.

ладно, массивы опустим, это вопрос спорный.

2JeeP
я же просил, не бросаться в меня спецификацией ECMA-262 :(

а теперь объясню что имел в виду, когда говорил насчет строк.
то, что свойство объекта ищется по его названию - это БОЛЬШОЙ минус в скорости. если б свойство было скажем просто указателем, или хотябы числовым индексом - все работало бы гораздо быстрее (кто не понял, объясню - сравнение чисел НАМНОГО быстрее чем сравнение строк)
для достижения максимальной производительности - в байткоде НЕ должно быть строк, только числовые индексы.

загляните в любую свф-ку - там КУЧА мусора типа имен переменных. поиск по строке не имеет значения в маленьких скриптах, но это фатально, когда есть куча объектов с кучей свойств, к каждому из которых можно обратится лишь по названию.

и С++ и Дельфи здесь совсем не причем. тут имеется ввиду не тип данных, а способ обращения к переменной.
переменная может (и должна в данном случае) не иметь фиксированного типа, но она не обязанна иметь строковой идентификатор в процессе выполнения

ЗЫ. у меня юбилей - сотый мессадж ;)

infinity 06.09.2002 11:34

и джаваскрипт сюда попрошу не путать, мы его отдельно обмоем :D

2 Nox Noctis:

а как АС понимает в какой тип надо преобразовывать индекс
массива??? ведь индекс может быть и строкой
a["xxx"]=4;
АС просто преобразовывает все индексы в строки да и все,
если нет - ответте на вопрос выше

Fisher 06.09.2002 11:46

Я думаю этот спор безперспективен поскольку стандарт есть стандарт , а формировался он наверняка еще задолго до МХ. Ты флэш 3 видел? И я не видел. :p

infinity 06.09.2002 11:52

2Fisher

если свотреть с твоей точки зрения, то тут на форуме 90% споров бесперспективных.

и я же в самом начале сказал, СПЕЦИФИКАЦИЕЙ В МЕНЯ НЕ БРОСАТЬ :D
а то завели тут про стандарт.
значит стандарт для этих целей голимый выбрали ;)
от АС в отличии от джаваскрипта скорость работы требуется намного выше, потому,что динамики не в пример больше,
поэтому я думаю что ECMA-262 здесь не самый лучший выбор в качестве прототипа АС

Fisher 06.09.2002 12:15

Ты земляк недопонимаешь наверное самого слова - СТАНДАРТ :).
А пофантазировать можно конечно :) И свой стандарт написать можно и плэер к нему. :). И воще чего так мелко -интерпретатор - давай уже прямо у клиента и компилить :D

infinity 06.09.2002 12:24

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

а свой плеер, это тоже вариант, но уже оффтопик.
я этот спор затеял, чтоб мне объяснили, почему так сделано, а не навязывали свое мнение, обвиняли в некомпетентности, или еще чего-то там.

пока ничего по сути я не услышал :(

JeeP 06.09.2002 12:30

пока ничего по сути я не услышал

так ведь ничего по сути и не спросил!

а те примеры кто. раньше давал - так тебе ж объяснили почему так!

давай дальше! вскрывай проблему!!! по полной! :)

infinity 06.09.2002 12:37

2 JeeP

якобы объяснили, но я ведь написал
06-09-2002 10:29

могу повторить, если тебе лень читать:

1.Почему во время выполнения переменные ищутся по строковым идентификаторам
2.Преобразование типов в индексе - ИМХО чушь собачья. почему? - см. выше

в итоге ничего никто не объяснил.
попытались - да. объяснили - нет :(

sapiens 06.09.2002 12:42

все это конечно интересно, но я не понял одного - при всех достоинствах, особенностях и недостатках кто-то видит альтернативу? у пресловутой продукции мелкософта есть альтернатива, у автомобилей ВАЗ есть альтернатива, даже в плане выбора страны проживания есть альтернатива. а кто-то знает продукт подобный Flash? очень рад за знающих... я - не знаю. поэтому я пользуюсь им. и, в принципе очень доволен.

Fisher 06.09.2002 12:43

Да ты не обижайся :)
Просто твой вопрос из серии - почему небо синее а вода мокрая :) Можно конечно потрепаться но мне кажеться предметней спросить у разработчиков ММ если так уж наболело :)

infinity 06.09.2002 12:46

хоть мы тут не об этом, но альтернатива есть - не помню правда как называется, но распространяется в рамках GNU, opensource и все дела...

infinity 06.09.2002 12:51

2Fisher

я и не обижаюсь. на обиженых воду возят :)
просто я тут какраз пишу интерпретатор аналогичный АС, и вижу, что можно было сделать намного лучше, чтоб работало быстрее итд.
и если я, рядовой ламер, вижу способы сделать лучше, то почему профессиональные прогрэммеры из макромедиа это не видят - вот что зацепило. или им просто ПО%№Й?

ну так что? сказать в защиту АС нечего?
все согласны с названием топика что ли??? :D :D :D

ish 06.09.2002 12:54

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

о чем вобще речь. !?

OverLord 06.09.2002 12:55

"1.Почему во время выполнения переменные ищутся по строковым идентификаторам
2.Преобразование типов в индексе - ИМХО чушь собачья. почему? - см. выше "
1. ну для того, чтобы были возможны вещи типа eval("a+5").
2. почему, так и не понял. если ты пользуешься числовыми индексами, то на твоей любимой скорости это практически не отразится.

А вообще, конечно, по таким техническим вопросам вроде "почему это сделано так, а не так", лучше обращаться к Макромедии...

ish 06.09.2002 13:04

и еще не надо сравнивать языки компиляторы с интерпритаторами, две разные вещи, в том числе и по производительности.

и в догонку, люди писавшие спецификации гораздо умнее нас с нами...

infinity 06.09.2002 13:04

2ish
коль до конца не читал, то я тебе ничего и не отвечу
о чем речь? - не ленись и прочитай топик.
да и какая разница, как называть - массив или экземпляр класса Array, суть от этого не изменится. а суть такова, что индексы массива - строки, хоть в начале меня и пытались переубедить.

2OverLord
чтобы достичь цели - вещи типа eval использовать не обязательно. более того - использование eval не только ухудшает читаемость кода, но и уменьшает производительность.
в свое время программисты отказались от использования goto.
ИМХО подобная участь в скором времени ожидает и eval

infinity 06.09.2002 13:06

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

ish 06.09.2002 13:06

Цитата:

Оригинал написал(а) infinity
а суть такова, что индексы массива - строки
уф ну до чего упрямый, ну нету в АС массивов, НЕТУ!!!

ish 06.09.2002 13:09

Цитата:

Оригинал написал(а) infinity
я интерпретаторы с компиляторами и не сравнивал, а насчет людей писавших спецификации - спору нет, я просто говорю, что для даного случая спецификация выбрана НЕ правильно
предложи правильную спецификацию

infinity 06.09.2002 13:12

2ish

кто тут упрямый так это ты.
я уже писал массив=экземпляр класса Array, и че ты придолбался?
и для удобности такое обозначение используют все нормальные люди. если не веришь - возьми любую нормальную книгу по АС (напр. издательства O'Reilly)

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

infinity 06.09.2002 13:14

а что, я их разрабатываю что ли? у меня другая специальность

ish 06.09.2002 13:20

напомню сорс инициализации класса Array
Код:

function Array () {
        ASSetPropFlags(this, null, 0);
        var length = arguments[0];
        if ((arguments.length != 1) || (typeof (length) != "number")) {
            length = arguments.length;
            var i = 0;
            while (i < length) {
                this[i] = arguments[i];
                i++;
            }
        }
        this.length = length;
    }

var o = Array.prototype;

o.push = function  (v) {
        var i = 0;
        while (i < arguments.length) {
            this[this.length] = arguments[i];
            i++;
        }
        return (this.length);
};
o.pop = function  () {
        var i = (this.length - 1);
        var r = this[i];
        this.length = i;
        return (r);
};
o.concat = function  () {
        var r = [];
        var n = this.length;
        var i = 0;
        while (i < this.length) {
            r[i] = this[i];
            i++;
}
        i = 0;
        while (i < arguments.length) {
            var a = arguments[i];
            if (AsInstanceOf(a, Array.prototype)) {
                var j = 0;
                while (j < a.length) {
                    r[n++] = a[j];
                    j++;
                }
            } else {
                r[n++] = a;
            }
            i++;
        }
        return (r);
    };
    o.shift = function  () {
        var r = this[0];
        this.splice(0, 1);
        return (r);
    };
    o.unshift = function  (v) {
        var n = arguments.length;
        if (n > 0) {
            var i = this.length;
            while (((i = (i+1))) >= 0) {
                this[i + n] = this[i];
            }
            i = 0;
            while (i < n) {
                this[i] = arguments[i];
                i++;
            }
        }
        return (this.length);
    };
    o.slice = function  (iA, iB) {
        iA = AsClamp2(iA, 0, this.length);
        if (typeof (iB) == "undefined") {
            iB = this.length;
        }
        iB = AsClamp2(iB, 0, this.length);
        var r = [];
        var i = iA;
        while (i < iB) {
            r[r.length] = this[i];
            i++;
        }
        return (r);
    };
    o.join = function  (sep) {
        if (typeof (sep) == "undefined") {
            sep = ",";
        }
        var r = "";
        var i = 0;
        while (i < this.length) {
            if (i != 0) {
                r = r + sep;
            }
            r = r + this[i];
            i++;
        }
        return (r);
    };
    o.splice = function  (iSpl, nDel) {
        if (!arguments.length) {
            return;
        }
        iSpl = AsClamp2(iSpl, 0, this.length);
        if (arguments.length == 1) {
            nDel = this.length - iSpl;
        } else {
            nDel = AsClamp(nDel, 0, this.length - iSpl);
        }
        var nInsert = Math.max(arguments.length - 2, 0);
        var nMove = (nDel - nInsert);
        var i;
        var r = this.slice(iSpl, iSpl + nDel);
        if (nMove > 0) {
            i = iSpl;
            while (i < (this.length - nMove)) {
                this[i] = this[i + nMove];
                i++;
            }
            this.length = i;
        } else {
            i = this.length;
            while (iSpl <= ((i = (i+1)))) {
                this[i - nMove] = this[i];
            }
        }
        i = 0;
        while (i < nInsert) {
            this[iSpl + i] = arguments[i + 2];
            i++;
        }
        return (r);
    };
    o.toString = function  () {
        return (this.join());
    };
    o.qsort = function  (lo, up, cf) {
        while (lo < up) {
            var i = lo;
            var j = up;
            var t = this[lo];
            while (i < j) {
                while (cf(this[j], t) > 0) {
                    j--;
                }
                this[i] = this[j];
                while ((i < j) && (cf(this[i], t) <= 0)) {
                    i++;
                }
                this[j] = this[i];
            }
            this[i] = t;
            if ((i - lo) < (up - i)) {
                this.qsort(lo, i - 1, cf);
                lo = i + 1;
            } else {
                this.qsort(i + 1, up, cf);
                up = i - 1;
            }
        }
    };
    o.sort = function  (cf) {
        if (typeof (cf) == "undefined") {
            cf = function  (x, y) {
                x = string (x);
                y = string (y);
                if (x >= y) {
                    if (y >= x) {
                        0 ;
                    } else {
                        1 ;
                    }
                } else {
                }
                return (-1);
            };
        }
        this.qsort(0, this.length - 1, cf);
        return (this);
    };
    o.reverse = function  () {
        var i = 0;
        var j = (this.length - 1);
        while (i < j) {
            var t = this[i];
            this[i++] = this[j];
            this[j--] = t;
        }
        return (this);
    };
    ASSetPropFlags(o, null, 3);


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

ish 06.09.2002 13:23

да, сорс для пятерки...
в шестой версии этот класс является "родным".

infinity 06.09.2002 13:26

ну ты воистину флудер :D

кстати где ты его раздобыл, еси не секрет?

ish 06.09.2002 13:30

я работаю в макромедии :) отдел разработки :))

infinity 06.09.2002 13:33

ну тогда передай им, что АС - лажа, что вы там Х43И пинаете :D лично от меня.
и что я один стою всего вашего отдела :D :D :D
:cool:

ish 06.09.2002 13:37

Цитата:

и что я один стою всего вашего отдела
мы уже в курсе :) по твоему адресу выслана группа в черном комуфляже :))

infinity 06.09.2002 13:40

Цитата:

по твоему адресу выслана группа в черном комуфляже :))
блин! чего ты раньше не сказал! а то щас боюсь к их приезду не успею пива купить :D

infinity 06.09.2002 13:41

а если серьезно?
JeeP, Nox Noctis, неужели вам нечего сказать?

ish 06.09.2002 13:42

по дороге купите :))

JeeP 06.09.2002 14:01

2infinity:
так ведь небо действительно - синее,
а море - мокрое! :D


2ish: :p


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

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