То ли осень на меня так действует, то ли ещё чего, но всю эту неделю боролся с тотальной ленью и писал мало кода, а работу над 5.2 нормально возобновил только вчера. Бог даст - завтра закончу часть по коду и можно будет уже пощупать потоки в действии.
|
Закончил работу на версией 5.2. Скоро обновлю документацию.
Сделал небольшой видео обзор: http://www.youtube.com/watch?v=K2GAANmWTgQ Demo: http://jsfiddle.net/kobezzza/hut2jhL9/ |
Провёл стресс тестирование:
100 000 потоков ни одного лага 1 000 000 потоков начинает глючить уже :) |
чёта у меня демка не запустилась. но потоки меня убедили. заюзаю твою либу :)
|
Цитата:
chrome://flags/#enable-javascript-harmony и перезапустить браузер Тестил работу в ФФ, хроме и ноде. Ноду запускать с флагом --harmony |
kobezzza,
можно пару слов о том, как потоки внутри устроены? Я просто не представляю как их возможно сделать без setInterval/setTimeout. //в код не иду, т.к. всё равно мало что пойму) |
Цитата:
Есть планировщик потоков и он на каждой итерации событийного цикла выбирает из очереди потоков те, которые выполнятся в рамках текущей итерации, причём общее время всех операций должно быть не более 60мс. Логично, что чем выше приоритет, тем выше шанс что поток попадёт на исполнение и его максимальное время исполнения. Само разбиение операции использует yield, т.е. после каждой итерации Collection считается затраченое время и если оно больше дозволенного, то операция прерывается (yield). Если очередь потоков не пуста, то раз в заданный момент времени (по setTimeout) планировщик опять выбирает потоки для запуска и выполняет. https://github.com/kobezzza/Collecti...rEach.es6#L688 |
kobezzza,
спасибо за пояснение) *ушёл делать конкурента Коллекшену *злобно смеётся* * |
Цитата:
|
Проверил работу в Safari на маке... чёртовы слоупоки всё ещё не поддерживают генераторы :( Остаётся надежда, что в обещаном релизе Safari 8 они введут поддержку.
Вообще Safari сейчас самый отсталый браузер по поддержки фич и скорости работы. Также не могу найти нормальный ресурс, где пишут о новых фичах / планах новых версий Safari для разработчика, а не для простого пользователя, а то складывается впечатление, что в кроме новой панели вкладок в Safari 8 ничего и нет :) |
да какие генераторы, в последнем Safari 7.0.6 даже Map и Set нет, даже IE уже обогнал в этом плане
|
Цитата:
Что касается ИЕ12, то там должны появится генераторы, объект Proxy и прочие радости, а про Safari 8 я даж хз где почитать можно:-E Кстати поправьте меня, если я не прав, но помоему Safari единственный браузер, у которого нету публичной dev-сборки. *) Opera Next *) Chrome Canary *) FF Aurora , FF Nightly *) IE Developer *) Safari ??? |
Proxy разве не заменили на Object.observe?
|
Цитата:
|
Цитата:
|
Кстати, Proxy позволяют делать настоящее множественное наследование, без каких либо оверхедов, т.е. вешаем обработчик на событие "отсутствия свойства или метода" и перенаправляем на другой Proto Chain и т.д.
Другое дело, что такая фича нужна крайне редко, но всё равно - приятно :) |
так вот же http://nightly.webkit.org/
|
Цитата:
|
Поигрался с Nashorn, кто не в курсе - это новая JS VM от Oracle, построенная поверх JVM и входящая в стандартную поставку Java 8 в замен старичка Rhino.
Собственно что могу сказать: движок быстрый (по заверению авторов не уступает V8, хотя V8 уже не является флагманом), но к сожалению поддержка только ECMAScript 5.1. Логичный плюс VM поверх JVM - это лёгкий биндинг Java вызовов, т.е. мы можем в полной мере юзать всю мощь библиотек Java и JVM. *** Кто хочет поиграться, то запустить REPL очень просто, например, cd '/c/Program Files/java/jre8/bin' jjs Использование в Java: ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); engine.eval("print('Hello World!');"); |
Выпустил хотфикс v5.2.4
|
Обновил доку, добавил описание новых параметров методов и т.д. а также добавил отдельную главу с описанием механизма работы потоков:
https://github.com/kobezzza/Collecti...%B2-Collection Также выпустил очередной хотфикс апдейт 5.2.7 |
http://habrahabr.ru/post/237613/
В такие моменты мне становится грустно, т.к. в Collection похожий механизм есть уже несколько лет :( А впрочем пх :) |
kobezzza,
всё потому, что Коллекшену не хватает рекламы/пиара. |
Цитата:
1) Нужна дока на инглише (ну это пол беды и вроде как работа над эти идёт :) ) 2) Нужен пиарщик :D У меня просто нет времени заниматься пиаром и так каждый раз себя по руке бью, как трачу лишнее время. Да и пофиг в общем, Collection и прочее написан под реальный проект, над которым я работаю и решают мои задачи - это самое главное, просто иногда обидно, что не могу людям просто даже рассказать о своих изысканиях, разве что тут веду блог, но кому тут это интересно? От силы человек 5-6 :) |
kobezzza,
Цитата:
Цитата:
Цитата:
|
Цитата:
|
kobezzza,
тогда сам выбирай или писать краткие заметки тут и иметь медленно растущую популярность, или полноценные статьи на Хабре и быть заваленным пулл реквестами и комментами про lodash :D |
Цитата:
|
kobezzza,
Цитата:
Цитата:
|
kobezzza, как можно быстро понять $C? какая кривая обучения?
|
Цитата:
forEach some - причём some юзают, как forEach который можно сбросить :D А всякие map / reduce / filter в глаза не видели и не знают. Потом нужно понять, что $C - это антоним Unix Way, т.е. // Классический Unix Way, супер избыточно и не эффективно filter().filter().map().slice() // $C, ни одной лишней операции, супер эффективно и быстро map(filter(), filter(), slice()) А остальное - это дело техники. Ну просто нужно потратить некоторое время и поиграться: может день/два и всё, всё таки библиотека не большая и есть подробная русская документация. С другой стороны можно взять сборку Collection.core, где в составе 1 forEach, а сама либа весит всего 10кб и юзать :) В отличии от нативного forEach Collection поддерживает все существующие виды коллекций, работает супер быстро и поддерживают кучу опций. |
Цитата:
Вообще полную сборку библиотеки по функционалу можно разбить на блоки: 1) Итерационное API - набор методов, большинство из которых напоминают нативные для массивов, для итерациям по коллекциями, самая главная часть 2) Контекстное API - набор методов для работы внутри итератора $C([ ... ]).forEach(function () { this.break(); }); 3) Ссылочное API - небольшой набор методов для универсального доступа к свойствам объектов var obj = {a: new Map([[1, [1, 2, 3, 4]]])}; $C(obj).get(['a', 1, 0]); 4) Кластерное API - набор методов, для инкапсуляции разные параметров внутри экземпляров $C $C().addFilter({ filter1: function () { ... }, filter2: function () { ... } }) $C([ ... ]).get('filter1 && filter2') 5) API для хранения данных - набор методов для загрузки / выгрузки коллекций в различные локальны хранилища $C({ ... }).save({ namespace: 'myData', lib: 'indexedDB' }) ... $C().load({ namespace: 'myData', lib: 'indexedDB' }) 6) Статичные методы - полезные функции, вроде extend Цитата:
Цитата:
Цитата:
|
В канарейке хрома новые виды коллекций и генераторы уже работают без включённого флага --harmony. Ура!
|
Выпустил патч 5.2.9
|
kobezzza, ты в travis ci тестируешь? видел коммит в поддписке)
|
Цитата:
travis удобен тем, что можно забить сразу несколько версий ноды для теста + автоматическая синхронизация с комитами гита. |
Выпустил патч 5.2.10
|
Выпустил патч 5.2.12
|
Выпустил версию 5.3.1.
Добавлен новый метод .contains |
Выпустил патч 5.3.7
|
Часовой пояс GMT +3, время: 20:13. |