Dmitry
если поджимает, надо использовать fast-builder
Alexander
то нужно улучшать GC
A64m
скорее почему unlines нормальные чанки не делает
Dmitry
а что gc ?
Dmitry
в первых приближениях gc почти ничего не делал
Alexander
ну вариант с векторами это улучшение GC
Alexander
и.к. вектор более дружелюбен к нему чем список
Alexander
не идеал конечно
Alexander
если хочется идеала то нужен unboxed вектор отступов и длинн и high level интерфейс
Alexander
но это уже какой-то c-style
Dmitry
но печально то, что в питоне быстро работает первый в голову пришедщий вариант, а тут надо адово заморочиться
Dmitry
но правда, не в питоне, а в pypy
Alexander
да
Dmitry
а pypy в питоне это мейнстрим?
Dmitry
т.е все его по умочланию используют?
Alexander
ну join это почти builder
Alexander
и.е. в общем-то билдер и есть
Alexander
только в строгую строку
Alexander
переобобщали
Alexander
в итоге в питоне огромная строка а у нас 100500 мелких и это не дефолтных интерфейс
Alexander
пора писать свой кофаундейшн?
Alexander
я хочу streaming в стиле iteratee
Dmitry
там огромная строка какого размера?
Alexander
на каждое слово из первого столбца - 1 строка вроде или одна на все
Alexander
секунду
A64m
вероятно то, что байтстринг в куче мест собирает строки не билдером, а просто из зиллионов 4хбайтных чанков обусловлено исторически, билдер то недавно появился
A64m
возможно исправления всего этого ужаса будут приняты
Alexander
@voidlizard 1 строка вида a1b1\na1b2...
Alexander
на каждое слово из первого столбца
A64m
Turtle.Bytes это, в каком-то смысле в стиле итерати
A64m
т.е. фолды вместо списков как в стриминге
Alexander
мне нравилось в iteratee (не снойманоиновом, а олеговом)
Alexander
так то что на IO там честно делался буффер и через hGetPutBuf бвло
Alexander
т.е. реально был контроль за памятью и как оно работало
Alexander
начиная с enumeratee эти полимеры пропали
Alexander
прикольно когда будут линейные типы их можно применить к этому делу, что оно безопасно будет при этом
Alexander
надо кстати посмотреть streaming-bytestring чтобы понять нравится ли оно мне
Dmitry
о, получилась быстрая версия без извращений
Alexander
м?
Dmitry
но я уже не понимаю, почему
Alexander
давай код и сколько по сравнению с моим
Dmitry
2.7 против 2.04 у твоей версии, но без fast-builder
Dmitry
https://gist.github.com/voidlizard/686accf784a329d8cf0b8c69f8e4a872
Alexander
прикольно,мне моя понятнее, но тут тоже норм
Alexander
если почему zip а не map?
Alexander
map (\s -> p <> s)
Dmitry
действительно
Alexander
или сразу fold как у меня
Alexander
foldMap
Alexander
мы ж потом все равно в моноед собираем
Dmitry
почти без разницы это всё
Dmitry
да
Alexander
ну это readability
Alexander
скорость изменять не должно
Dmitry
2.17 теперь
Alexander
норм
Dmitry
но эта версия теперь на человека похоже, т.е такое можно сразу написать
Dmitry
и что интересно - оно норм работает с обычным билдером
Alexander
тут кстати строки меньше, может оно и разумнее
Alexander
надо будет вечером мое посмотреть
Alexander
и главное баг
Alexander
его понять/починить охота
Dmitry
баг где?
Dmitry
только всё равно не могу никак вывод сделать из этой истории, кроме того, что наиболее идеоматичный код на х-ле будет тормозить, пока его не выправишь кувалдой
Dmitry
но в итоге - даже с использованием неизвращенных инструментов работает в два раза быстрее pypy
Dmitry
"используйте builder"
Dmitry
"выбирайте размер блока, который пишете"
A64m
вывод правильный
A64m
@qnikst баг, кстати, воспроизводится без оптимизации и на 8.2
Alexander
-O0?
Alexander
охренеть..
Alexander
похоже сегодня весёлый вечер будет
A64m
да
Dmitry
но чудеса не заканчиваются на этом
Dmitry
вот это - https://gist.github.com/voidlizard/686accf784a329d8cf0b8c69f8e4a872 работает 2.75
Dmitry
а вот это https://gist.github.com/voidlizard/686accf784a329d8cf0b8c69f8e4a872#file-bswtf42-hs
Dmitry
в два раза дольше
Alexander
deforestation не срабатывает ?
Dmitry
кто-то тут говорил, что списки хуже векторов?
Dmitry
нате