👨🏼‍💻
ок, почитаю еще
Дима
Хотя не, ты конечно можешь имплементировать iterator protocol руками, но это довольно тупо)
👨🏼‍💻
Хотя не, ты конечно можешь имплементировать iterator protocol руками, но это довольно тупо)
ну значит я довольно тупо это сделал, зато работает быстро.
Sergey
Хотя не, ты конечно можешь имплементировать iterator protocol руками, но это довольно тупо)
У меня есть такой знакомый. Который зачем-то многое руками пишет
👨🏼‍💻
Дима
class IterableTree { parent: IterableTree leftChild: IterableTree rightChild: IterableTree data: Array<any> * [Symbol.iterator]() { yield* this.data yield* this.leftChild // (!!!) yield* this.rightChild } }
Дима
Такой объект поддерживает for of и spread оператор и разворачивает находящиеся в нём данные (свой список и списки дочерних нод) так, как будет удобнее
👨🏼‍💻
так генератор тоже поддерживает for..of
Дима
Кстати из этого следует один важный для твоей затеи факт
Дима
Что нормальный человеческий for of котый я тебе предлагаю с самого начала, и есть твой генератор, только в нормальной форме
👨🏼‍💻
а как структура получается --- двухсвязный список
👨🏼‍💻
это ж значит, что можно юзать более интересные алгоритмы. хотя я не уверен как это подружится с исходным массивом
Дима
Как опишешь — так и получается, там вообще всё на что хватит фантазии может быть)
Дима
Хоть heap, хоть double linked list, хоть что)
👨🏼‍💻
ну будет странно описывать граф, а изначально он массив ...
👨🏼‍💻
... и потом опять в массив
Дима
Это не массив
Дима
Это Iterable
👨🏼‍💻
array -> iterable -> array
👨🏼‍💻
изначально приходит массив, затем я с ним че-то делаю итератором, потом обратно в массив
👨🏼‍💻
Или я уже че-т не понимаю?
Дима
Я не решал твою задачу)
Дима
Я тебе показывал кейс в котором используются генераторы)
👨🏼‍💻
Дима
Блядь
Дима
Сейчас
👨🏼‍💻
Кстати, важный нюанс --- все происходит на клиентской машине
👨🏼‍💻
а она может быть слабая и галимая
Дима
Монопенисуально)
Дима
Просто сделай обработку данных пачками, чтобы за раз был лаг не более установленных рамок
Дима
И в воркер их
Дима
Можно сразу в пять)
Дима
👍
Bullwinkle
Сначала делаешь чтобы работало Потом делаешь чтобы быстро Потом делаешь чтобы правильно Попытка решать эти проблемы в другом порядке будет довольно предсказуемой
Пожалуйста, прошу простить что запоздал и уже оффтоп, но вот мне кажется, что если шатл летит не в ту сторону, то смысла в его скорости никакого. Разве не чтоб 1. Работало 2. Правильно 3. Быстро ? Т.е. оптимизации же обычно в самом конце
Winni
Если работает не правильно, то это не работает
Winni
это как если решать задачу по тест кейсам, и твой код будет работать только на первом, в котором на вход undefined
Bullwinkle
а, тут под "правильно" имелось ввиду "не говнокод" наверное
Ivan
Есть какие-нибудь прогнозы по поводу релиза telegram-mtproto? @ZeroBias
Ivan
А то @alpha в проекте как-то стремно Может чем помочь? Не вижу роадмап
eahqzsr
как красиво проверить что все ключи и значения одного объекта имеются в другом?
eahqzsr
типа f({a: 1, b:2, c:3}, {a:1, c:3}) -> true f({a:1, b:2, c:3}, {a: 3}) -> false
Дима
А то @alpha в проекте как-то стремно Может чем помочь? Не вижу роадмап
Я там обхожу одно проблемное место в авторизации, как только его починю — будет нормальный релиз и роадмап, потому что это последний серьезный затык из всей череды был Доделал сейчас нужные изменения в архитектуре, сейчас буду пробовать интегрировать всё это
ixplo
Dmitriy
MyObject.prototype.func = {}; MyObject.prototype.func.function1 = function() {return true;}; MyObject.prototype.func.function2 = function() {return true;};
Dmitriy
почему так сделать нельзя?
👨🏼‍💻
Dmitriy
MyObject = function () { }; MyObject.prototype.func.function1 = function() {return true;}; MyObject.prototype.func.function2 = function() {return true;}; ===== test_proro.js:55 TypeError: Cannot set property "function1" of undefined test_proro.js:55 TypeError: Cannot set property "function1" of undefined at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:213) at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:185) at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172) at jdk.nashorn.internal.runtime.Undefined.set(Undefined.java:162)
Nikolay
Так ну а prototype.func = {} объявить?
Dmitriy
хоть MyObject = { };
Dmitriy
а есть разница между MyObject = { }; и MyObject = function () { }; для прототипов?
Дима
В nashorn кстати что не завезли es6 или препроцессоры? Зачем страдать то так)
Nikolay
nashorn omg
Nikolay
ток щас заметил
Dmitriy
MyObject = { }; MyObject.prototype.func = {}; MyObject.prototype.func.function1 = function() {return true;}; MyObject.prototype.func.function2 = function() {return true;}; кидает ошибку
Nikolay
Какую?
Dmitriy
MyObject = function () { }; MyObject.prototype.func = {}; MyObject.prototype.func.function1 = function() {return true;}; MyObject.prototype.func.function2 = function() {return true;}; так ок
Dmitriy
Какую?
test_proro.js:54 TypeError: Cannot set property "func" of undefined test_proro.js:54 TypeError: Cannot set property "func" of undefined at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:213) at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:185) at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172) at jdk.nashorn.internal.runtime.Undefined.set(Undefined.java:162) Java 8 (Nashorn)
Дима
nashorn omg
Да я тоже офигел уже)) Как динозавра встретить
Dmitriy
как помню он на V8 должен быть похож
Дима
Чудовищно конечно же
Dmitriy
что именно?
Дима
ну тебе стоит понимать, что твоя работа мягко говоря крайне нестандартна)
Dmitriy
это реализация ECMAScript 5.1+ в JDK
Dmitriy
и нормально работает, перевожу на протопиную модель наследования разросшийся код, чтобы по памяти было оптимальней
Дима
> нормально работает > перевожу на протопиную модель Понимаешь, тут есть одна проблема 😅
Дима
Относительно всех вообще