if-else быстрее, чем переключатель, почему? (в ActionScript3)

Протестировано следующее:

        var timer:int = getTimer();
        trace(timer);

        for ( var g:int = 0; g < 10000000; ++g)
        {
            var mod0:int = g % 10;
            var sum0:String = "";

            switch(mod0)
            {
                case 0: sum0 = "0"; break;
                case 1: sum0 = "1"; break;
                case 2: sum0 = "2"; break;
                case 3: sum0 = "3"; break;
                case 4: sum0 = "4"; break;
                case 5: sum0 = "5"; break;
                case 6: sum0 = "6"; break;
                case 7: sum0 = "7"; break;
                case 8: sum0 = "8"; break;
                case 9: sum0 = "9"; break;
                default: break;
            }
        }

        timer = getTimer();
        trace(timer);

        for ( var h:int = 0; h < 10000000; ++h)
        {
            var mod1:int = h % 10;
            var sum1:String = "";

            if (mod1 == 0)      sum1 = "0";
            else if (mod1 == 1) sum1 = "1";
            else if (mod1 == 2) sum1 = "2";
            else if (mod1 == 3) sum1 = "3";
            else if (mod1 == 4) sum1 = "4";
            else if (mod1 == 5) sum1 = "5";
            else if (mod1 == 6) sum1 = "6";
            else if (mod1 == 7) sum1 = "7";
            else if (mod1 == 8) sum1 = "8";
            else if (mod1 == 9) sum1 = "9";
        }

        timer = getTimer();
        trace(timer);

таймер дает: 221 443 636 , что означает, что switch принимает 222ms и if-else занимает 193ms, почему?
Для того, что я знал в C ++, switch работает быстрее, потому что он компилирует коды сборки для таблицы перехода, не должен ли он совпадать с AS3?

2
nl ja de
ActionScript , как следует из названия, является языком сценариев, C ++ является скомпилированным языком. Вы не должны сравнивать их.
добавлено автор Ash Burlaczenko, источник
@AshBurlaczenko Хотя я согласен с тем, что нельзя сравнивать AS с C ++, вы не совсем правы: мошенник ActionScript - это и религия из прошлого, и поклон в соответствии со стандартом ECMAScript, который он реализует. Это, однако, скомпилированный язык; компилятор ActionScript создает исполняемый байт-код. Разница в основном заключается в том, что ActionScript представляет собой динамически типизированный язык и работает на виртуальной машине, Flash Player, а C ++ - статически типизирован, а ее исполняемые файлы запускаются в среде.
добавлено автор weltraumpirat, источник
хорошо, но я все еще хочу знать, почему if-else быстрее, спасибо.
добавлено автор Marson Mao, источник

1 ответы

There is a pretty thorough look at this here: http://jacksondunstan.com/articles/793

TL; DR: компилятор ActionScript нечеткий. Кроме того, оператор switch намного сложнее в AS3, чем, например, C/C ++, поскольку он может работать с нецелыми типами.

5
добавлено
+1 Джексон Данстант - тот парень скалы
добавлено автор Chris, источник
+1 Это динамическая типизация, которая делает разницу: виртуальная машина должна выполнить некоторую проверку типов и дополнительные сравнения «за сценой» для разрешения каждого случая, в то время как простые, если утверждения, подобные тем, которые приведены в примере, требуют только простой проверки равенства. Однако время будет отличаться, когда логическое выражение в выражении if более сложное.
добавлено автор weltraumpirat, источник