Если есть желание – можете напилить проектик на github, мы его соберем и прогоним на той же машине. Ну или можете сами собрать наши сервисы и прогнать их на своей =)
Ага, спасибо, тоже изучали бенчмарк по ссылке. В наших тестах, к слову, так же была темная лошадка C++, которая оказалась самой очень быстрой. На python почему-то никто из команды не взялся разрабатывать первый вариант бенчмарка, поэтому его не стали рассматривать и потом. =)
Спасибо! Я тоже думал было переписать на split во всех примерах, но потом показалось, что с regexp будет более жизненно. При оказии попробую прогнать wrk со split.
Почему не нужна? IoC контейнер как на js будете писать? ) В более пропаханных языках есть reflection, который позволяет вызывать метод типа newInstance(args) у рефлекшна класса.В js пока что это можно сделать указанными выше способами.
Именно проблему, а не «проблему». Речь идет не только про баги и забывчивость разработчиков, но, например и в частности в моем примере, про абстрактную фабрику, которая не знает конструктор, экземпляр которого она создает. По сему, у конструктора может быть разное количество аргументов.
Можете пояснить фразу про деоптимизацию? Почему? В моем примере имелся в виду результат Array.prototype.slice.call(arguments, 0); извиняюсь за неточность )
Всмысле без null? Если да, то ошибаетесь, нельзя — тогда первый элемент списка аргументов станет контекстом для результирующей функции. Если аргументов у конструктора нет, то да, можно просто передать пустой массив или вообще ничего. =)
Для случая с динамическим количеством аргументов:
Можно убрать танцы с obj = new Fubar; Fubar.apply(obj, args) и написать не очень изящную, но функциональную строчку:
var fubar;
fubar = new (Function.prototype.bind.apply(Fubar, [null].concat(arguments)));
Чтобы не играть в испорченный телефон, предлагаю прочитать материалы из ссылок в конце статьи, мне кажется, они лучше внесут ясность чем я в двух строках комментариев =)
Странный вопрос. Инверсия управления, как принцип, в первую очередь, объектно-ориентированного программирования, безусловно включает в себя и понятие полиморфизм. Ровно, как и наследование и инкапсуляцию =)
Провайдеры карт — это лишь более наглядный пример. Представьте, что у вас есть сервис хранения кэшированных данных. И, например, две его имплементации — хранение в cookies, хранение в localStorage.
При этом можно сделать третью имплементацию, которая, в зависимости от браузера, будет определять, куда сохранять кэш. Такое можно реализовать на веб компонентах? На мой взгляд, это просто разные слои абстракций. В вашем примере вы передаете параметр provider, который означает, если я не ошибаюсь, что в компонент user-map содержит в себе все реализации провайдеров.
самойочень быстрой. На python почему-то никто из команды не взялся разрабатывать первый вариант бенчмарка, поэтому его не стали рассматривать и потом. =)наверное=)Вам знакомо понятие reflection из других языков программирования? Это тоже костыль?
Мне кажется, вы не совсем поняли проблему, но пытаетесь раскритиковать решение.
Можно убрать танцы с
obj = new Fubar; Fubar.apply(obj, args)
и написать не очень изящную, но функциональную строчку:Сравнение
CJS + Browserify + Traceur =)
upd. Но мой пример не исключает полезность и интересность статьи =) Автору спасибо =)
При этом можно сделать третью имплементацию, которая, в зависимости от браузера, будет определять, куда сохранять кэш. Такое можно реализовать на веб компонентах? На мой взгляд, это просто разные слои абстракций. В вашем примере вы передаете параметр provider, который означает, если я не ошибаюсь, что в компонент user-map содержит в себе все реализации провайдеров.
Более того, как быть со слоем DI в node.js?