1. JavaScript / Говнокод #11980

    +161

    1. 1
    eval( array.join('+') );

    Конечно, я понимаю что всякие Haskel там, то, сё...

    Запостил: bot, 24 Октября 2012

    Комментарии (26) RSS

    • Сравнительные тесты: http://jsperf.com/array-summing
      Ответить
      • Тест смешной, но сравнивает вообще разные вещи:
        for-in - это конкатенация строк, т.как ключи ВМ всегда приводит к строкам. Их хотя бы нужно было обратно кастовать к числам.
        eval - будет ухудшаться с увеличением длины массива, при чем скачкообразно, с шагом *128 (по крайней мере в Мозиловской ВМ) Это, конечно, если стека вообще хватит.
        Ответить
      • {"statusCode":500,"error":"Internal Server Error","message":"An internal server error occurred"}
        Ответить
    • array.reduce(function(a, b) { return a + b; }, 0)
      Ответить
      • кроссплатформа!
        недобраузеры негодуют
        Ответить
      • Обосрался жиденько ваш функциональный reduce.
        http://jsperf.com/array-summing/6
        Ответить
        • Ну вы как бы все равно тестируете плохо... Нужно, для честности, тестировать на массивах в несколько тысяч длиной. Массив из 7 элементов практически наверняка будет быстрее без циклов сложить...
          Ответить
        • Посмотрите-ка заодно, как reduce обкакается при поиске в парочке петабайтах данных, распределённых по сотне-другой машин.
          Ответить
        • Да, и еще, reverse for тупо пропускает первый елемент массива - это вообще надувательство, если честно.
          Ответить
    • >всякие Haskel
      Lisp скорее
      Ответить
    • function arrayMergeSum(array) {
          "use strict";
          var half, i, other, len = array.length;
          while (len > 1) {
              half = len >> 1;
              other = len - 1;
              for (i = 0; i < half; i++) {
                  array[i] += array[other - i];
              }
              len -= half;
          }
          return array[0];
      }

      Любителям нетривиальных подходов посвящается. Вряд ли оно будет быстрее, но врага с толку собъет - почти наверняка.
      Ответить
      • Индусы рукоплещут стоя.
        Ответить
        • Та ну? :)
          http://jsperf.com/array-summing/7
          Ответить
        • function arrayEightSum(array) {
              "use strict";
              var len = 8 - (array.length - ((array.length >> 3) << 3)),
                  i = len, result = array.length;
              array.length += len;
              while (i > 0) {
                  array[result + --i] = 0;
              }
              for (result = i = 0, len = array.length; i < len;
                   result +=
                   array[i]     + array[i | 1] +
                   array[i | 2] + array[i | 3] +
                   array[i | 4] + array[i | 5] +
                   array[i | 6] + array[i | 7],
                   i += 8) { }
              return result;
          }

          Кстати, еще вариант, теперь, думаю, подчитал Упанишад, и Шива должен быть доволен.
          Ответить
          • А Дуфф в жабаскрипте допустим?
            Ответить
            • Неа, хотя где-то кто-то предлагал goto, и можно было бы попробовать с его помощью что-то придумать, но в чистом виде - никак.
              Кстати, в отличие от ожидаемого результата, он не просто плохой, он удивительно хреновый. Я даже и предположить не мог, что все на столько плохо.
              http://jsperf.com/array-summing/9
              Ответить
              • >хотя где-то кто-то предлагал goto
                ЛолШТО? Goto в js? Там только брейки.

                >он не просто плохой, он удивительно хреновый.
                Правильно. Извраты и говнохаки должны, нет просто обязанны дико тормозить.
                Ответить
                • В AS3 уже есть, в PHP - тоже, если жабоскриптеров жаба не задушит (???) то почти наверняка появится. Это ж наше все, как жеж без него.
                  В данном случае изврат же не для того, чтобы чего-то конкретного добиться, а чтобы посмотреть, что именно оно делает. Очевидно что JIT тупо заточен под какие-то тривиальные случаи, и умеет их оптимизировать, но в целом плохо понимает жабоскриптовксий код / плохо справляется с более общими операциями. А они понадобятся, когда в Жабоскрипте захотят, например, с картинками работать, фильтры там всякие, хистограмы и т.п. Ну и звуки да и вообще все, что требует менее тривиальных рассчетов.
                  Ответить
                • https://github.com/bartaz/impress.js/issues/119

                  Это жж не спроста!
                  Ответить
                  • Это они из явы взяли. Там тоже зарезервировали - чтоб и не пытались.
                    Ответить
                • Сначала goto, а потом захочется, чтобы свитч и цикл могли сливаться в экстазе аля duff device, а потом захочется адресной арифметики... Нет, определенно в js это не нужно.
                  Ответить
        • Ивасилий в итоге свалил с концами? Или сидит всё же под иной файкою?
          Ответить
      • Вы весь день об этом думали? :)
        Ответить
        • Просто не мог оторваться ни на секунду!
          Ответить

    Добавить комментарий