Comments 30
Что уже дождаться не могу — короткий синтаксис функций и деструктивное присваивание.
И спасибо за обзор)
И спасибо за обзор)
Как бы, можно в этом и поучаствовать, если «на ты» со старым добрым С++ ;)
Репозиторий на GitHub всего лишь зеркало.
Официальный репозиторий: code.google.com/p/v8/
Памятка для желающих поучаствовать: code.google.com/p/v8/wiki/Contributing
Официальный репозиторий: code.google.com/p/v8/
Памятка для желающих поучаствовать: code.google.com/p/v8/wiki/Contributing
Всегда интересовало, чем же arguments и конкретно arguments.callee так плохи?
arguments — ничем. arguments.callee — скоростью, так что в strict его запрещено использовать.
v8 выключает все оптимизации на код, где используется arguments.
Где про это можно почитать?
Странное поведение, если это правда.
у arguments object достаточно мутная семантика, поэтому если v8 видит, что он используется нетривиальным образом, то она отказывается оптимизировать. это проистекает из соображения, что в коде, для которого важны оптимизации, arguments чаще всего не используется или используется тривиальным способом, поэтому и реализовывать сложную поддержку нет смысла. (меньше сложностей — меньше багов).
или используется тривиальным способом
Что-то вроде
<code>var args = Array.slice(arguments);</code>
?
Array.prototype.slice.call(arguments);
Раньше часто встречал, что нет. Тоже интересно узнать, изменилось что или нет. Сомневаюсь.
нет, это тривиальные перечислены в habrahabr.ru/post/151690/?reply_to=5153675#comment_5152882
Владислав Егоров писал об этом подробно в группе nodejs.
это не совсем верно, ряд конструкций поддерживается в оптимизированном коде:
arguments[i]
, arguments.length
, func.apply(obj, arguments)
Может код и оптимизируется, но такому тесту я был, мягко сказано, удивлён. @jsperf. Обратите внимание на 3ий тест, где по отношению ко 2ому уменьшен доступ к
arguments[i]
и код становится быстрее в 2 раза(в хроме), а в лисе даже в 3 раза. И счет идёт на миллионы операций, так что «в 2 раза» это существенно быстрее. Или я где-то просчитался в тесте?выход заграницы arguments при чтении arguments[i] вызывает деоптимизацию, что и наблюдается.
тест кстати слегка шумный: например, непонятно зачем там создается closure на каждую итерацию цикла.
тест кстати слегка шумный: например, непонятно зачем там создается closure на каждую итерацию цикла.
Ясно, получается
Согласен что можно было инициализацию функции вывести в setup function теста, но так как инициализация соблюдена для всех тестов, то это не проблема, ведь не сама скорость теста важна, а их соотношение.
arguments[i]
дорогой только в случае IndexOutOfRange
, спасибо. Добавил testcase с fake аргументами и скорость сравнялась.Согласен что можно было инициализацию функции вывести в setup function теста, но так как инициализация соблюдена для всех тестов, то это не проблема, ведь не сама скорость теста важна, а их соотношение.
Спасибо за статью. Уже обнаружил Proxy в своей Aurora (это которая Firefox Nightly).
P. S. Ставьте пожалуйста пробела вокруг =.
P. S. Ставьте пожалуйста пробела вокруг =.
> либо segmentation fault, либо синтаксическая ошибка
В багтрекере надо его оформить
В багтрекере надо его оформить
> в Map мусор собирается аналогично WeakMap
нет, Mapом все должно удерживаться, как вы проверяли?
нет, Mapом все должно удерживаться, как вы проверяли?
Написал судя по конфигу:
DEFINE_bool(collect_maps, true, «garbage collect maps from which no objects can be reached»)
может не правильно понял, чуть позже проверю.
DEFINE_bool(collect_maps, true, «garbage collect maps from which no objects can be reached»)
может не правильно понял, чуть позже проверю.
Sign up to leave a comment.
ECMAScript Harmony и Node.js