Rafael 🌵
Генераторы в 2017 стоит использовать по их прямому назначению
и какое у них прямое название? не сорить в память?
Андрей
Просто есть одна малюсенькая проблема: обратная совместимость.
Дима
Долго думал, но не понял что ты имеешь ввиду.
Система типов как в питоне даром не нужна и метаинформации текущая архитектура языка никак не мешает)
Андрей
С чем?
Со старым кодом.
Vyacheslav
В node.js io стримы в самом ядре, это ко всему прочему её сильная сторона, какая память вообще))
В ноде такого опыта нет, использовал генераторы в PHP, рассказал опыт оттуда, нода не кладет в память переменные?
Андрей
Система типов как в питоне даром не нужна и метаинформации текущая архитектура языка никак не мешает)
систему типов с питона, а про то, что можно метаинформацию в js код добавлять. Типа как во flow. Только чтобы это стандартом было.
Дима
В ноде такого опыта нет, использовал генераторы в PHP, рассказал опыт оттуда, нода не кладет в память переменные?
Когда последние запросы будут отправлены, результаты первых уже могут быть давно перемещены в архив
Дима
Более того, питон, который распополамило так что до сих пор собрать не могут в этом плане в подмётки не годится
Дима
Это их проблемы
Дима
В жс нашли решение, которое позволило сохранить совместимость с MooTools из 2006 года
Дима
Причём когда потребовалось использовать вообще то же самое поле
Андрей
Не в курсе этого. Можешь описать?
Дима
И это не единичный костыль, а принятое в языке архитектурное решение)
Vyacheslav
Давай еще раз объясню свой юз кейс есть таблица, в ней берем неизвестное количество записей за какую-то дату . Надо пройтись по всем и собрать какую-то стату. По мне так все это проще обернуть в генератор, которому можно указать сколько максимум забирать/хранить в памяти строк и при этом продолжать с ним работать как с обычным массивом
Дима
Не в курсе этого. Можешь описать?
Мета инфа добавляется с помощью символьных полей, которых по определению может быть сколько угодно. Наличие поля Symbol.iterator означает что объект можно итерировать, Symbol.isConcatSpreadable — то, как он будет вести себя при .concat в массивах. Symbol.unscopable позволил спрятать от старых библиотек новый метод array.keys() не поломав при этом ни одного сайта из миллиардов в сети
Kirill
А можно написать нормально и читаемо)
я про память, речь шла что тут есть какая то экономия
Андрей
Stream
И зачем?
Serhiy
Мне очч не хватает вот такой штуки из питона (x**2 for x in xrange(1,11))
Андрей
[].map(...)
Андрей
А range свой на генераторах можешь построить.
Kirill
с твоим кейсом нет, а с кейсом когда ты забираешь из базы сразу все есть
ну это очевидно, что если заберешь больше из базы - нужно больше памяти лол. Но реализация чанков бывает и без генераторов
Serhiy
Это что, вкратце?
коротка запись создания генератора для прохода по списку
Serhiy
[].map(...)
Как его остановить?
Андрей
Vyacheslav
ну это очевидно, что если заберешь больше из базы - нужно больше памяти лол. Но реализация чанков бывает и без генераторов
А я разве говорил что нельзя решить по другому? Можно еще через while написать, можно через goto. Но если писать через генератор, то можно не задумываться об этом и работать с данными как с обычным массивом, а потом при необходимости просто убрать этот генератор, заменив на обычный массив. Edited: Про goto шутка конечно же ;)
Serhiy
Всмысле?
В смысле что ты в середине мапа понял что ты не хочешь идти дальше
Андрей
Это же пример.
Андрей
+ я думаю, что в каком-нибудь лодаше есть такая хрень.
CherryTea
Спасибо, как в питоне точно не надо
Зря вы так, никогда проблем небыло с ней в пите
Serhiy
Напиши свой map.
[10000000 ids].map((id)=> select from db => if result true => break) - псевдокод
Дима
Зря вы так, никогда проблем небыло с ней в пите
Если проблем не видно, то это не значит, что их нет
Vyacheslav
целиком согласен, просто посыл был что генераторы как конструкция экономят память, что и непонятно было
Наверное не правильно выразился, имел ввиду что с их помощью решил проблему с памятью, можно было и по другому)
CherryTea
Если проблем не видно, то это не значит, что их нет
Нет, есть проблемы которые касаются менее 0.01% пользователей, тогда это уже не проблемы а проблемки
Дима
Нет, есть проблемы которые касаются менее 0.01% пользователей, тогда это уже не проблемы а проблемки
Я говорю про врождённую порочную архитектуру которая тащит типы в рантайме
Дима
Тем самым компенсируя отсутствие нормального статического вывода типов
Serhiy
Напиши свой map.
Я к тому что мап конечно охуенен но всех проблем не решает )
Андрей
Я к тому что мап конечно охуенен но всех проблем не решает )
Ну это понятно. Просто сторонними либами можно решить и эту проблему)
CherryTea
Я говорю про врождённую порочную архитектуру которая тащит типы в рантайме
Неканон, но к каким проблемам серьёзным это приводит?
Дима
Ресурсоёмкость и бессмысленность такого решения просто ограничивает язык
Serhiy
Ну это понятно. Просто сторонними либами можно решить и эту проблему)
Конечно. Но в питоне - одна строка создание генератора и дальше в цикле делай что хочешь ) На js это тоже решается и довольно легко (например с помошью co) , мне просто сама запись очень нравиться )
Дима
Не хочу обидеть но звучит как товтология
Я не обиделся, я же не пишу на нём
Anonymous
Не хватает такого синтаксиса store ...= { k: v }
Дима
Вут?)
Nick
Жесть)
Nick
А у кого-нибудь есть в закладках годные статьи о том, как браузер рендерит\обновляет страницу. Про рефлоу, репеинт - вот это все
Eugene
4 иранша
Eugene
за месяц
Eugene
транша
Eugene
подойдет?
Alexey
https://developers.google.com/web/fundamentals/performance/
Nikolay
гайз может кто нить сталкивался? ошибка только в хроме "WebSocket connection to 'ws://192.168.0.126:5060/' failed: Connection closed before receiving a handshake response"
Svyatoslav
Народ, вопрос по js: если я задам массив var a = [{..obj1..}, {..obj2..}] потом задам переменной a = [] что случится с obj1 и obj2? Они будут висеть в ОЗУ? или очистятся автоматически?
Костя
может твой сервер не поддерживает вебсокет, поэтому сразу закрыл сокет после http запроса?
Svyatoslav
Очистятся, когда до них дойдет GC
т.е. беспокоиться о переполнении памяти в данном случае не стоит?
Anonymous
Где-то читал, что delete лучше не юзать и GC с этим справится лучше. Но это не точно. Беспокоится в стандартном кейс конечно не стоит. Но если ты генеришь тысячами такие случае - что-то у тебя не так
Svyatoslav
не тысячами, а по 10, и только по запросу пользователя (отображение 10 едениц на одной странице)
Nikolay
ну что непонятно? сокет закрылся до того, как произошел хендшейк
Почему такая хеоня исключительно в хроме вылетает?
Nikolay
В других потестил норм