eahqzsr
У ленивых байтстрок конкатенация дорогая, если кусочки маленькие
Alexander
о!
Alexander
1.20
eahqzsr
Я так понимаю что ленивые байтстроки - это список строгих байтстрок, а билдер - дерево.
Alexander
builder сложнее чем дерево
Dmitry
@qnikst 1.20 а сколько было?
Alexander
~1.40
eahqzsr
Alexander
отключение аллокации второго вектора
Alexander
вынесением функции создания вектора и NOINLINE
Alexander
щас запушу
Alexander
https://gist.github.com/qnikst/a06ebe89274fd56b58372e3f9e37ba76 v-stream.hs
Alexander
старый файлик тоже оставил
Alexander
если честно мне это решение уже не очень нравится
Alexander
т.е. это уже обходит питон в 2 раза по скорости
Alexander
и в 3 раза меньше по памяти
Dmitry
у меня 1.17
Dmitry
т.е обходит в 3.5 раза
Alexander
кстати уменьшение -A улучшает ситуацию
Dmitry
только какой-то там косяк на вид
Alexander
файл не тот?
Dmitry
а не, всё ок
Alexander
щас посмотрю
Alexander
все ок
Alexander
8284 без -A памяти жрёт resident size
Dmitry
в 2.8 раза
Alexander
1.2s
Alexander
питон 92k
Alexander
91728 жрет питон
Alexander
более, чем в 10 раз
Dmitry
за счёт чего последняя версия быстрее?
Dmitry
но она что-то жесть. сходу такое не напишешь
Alexander
там наверняка что-то лишнее, но фишка в том, что вектора не аллоцируются вообще
Alexander
он каждый раз заново файл парсит
Alexander
итого нагрузка на gc околонулевая
Alexander
мы аллоцировали строку большую, она сразу ушла в gen 1
Dmitry
ну в смысле два прохода по списку, ну норм, в питоне так же делается
Alexander
потом просто парсим, скорость парсинга строки заново меньше цены gc
Alexander
ну не 2 а n
Alexander
n+1
Alexander
где n кол-во строк
Alexander
т.е. тут сменил алгоритм
Alexander
формально
eahqzsr
хм, а нельзя распарсить строго?
Alexander
до этого так было
Alexander
а это вариант, где специально мы не парсим все строго в вектор
Alexander
ожидаемо, что это лучше
Alexander
есть вариант еще лучше
Alexander
unboxed вектор отступов делать
Alexander
но это уже какое-то си
Danila Matveev
осталось, чтобы Гвидо питонячью версию втюнил
Зигохистоморфный
Эко вас то задание зацепило
Danila Matveev
было бы круто, если б кто-то оформил в виде поста
что-то мне подсказывает подобные разборы не оч просто по хаскеллю найти
eahqzsr
Скажи еще на хабр написать
Alexander
если мне кто-то дал времени из-ниоткуда я бы написал
Dmitry
@qnikst вектор отступов - это вектор (смещения, размера) строки?
Alexander
да
Alexander
я могу сделать, но если честно не хочу, попробую сейчас баг половить
Dmitry
@optician_owl тут не слишком понятен вывод из всей истории
Dmitry
ну, кроме "используйте FastBuilder"
Ilya
будут троллить потом этой статьей
Ilya
что хаскель медленнее питона (если не рвать ж*пу)
eahqzsr
Вот мне лучше скажите есть какая структура данных для хранения коротких байтовых строк, чтоб мало очень памяти жрала и быстрое тестирование членства поддерживала? Типа https://pypi.python.org/pypi/marisa-trie
Dmitry
обычный trie ?
Alexander
bytestring-set
Alexander
который @lonokhov писал?
Alexander
и я
Alexander
там O(ln(n)) поиск членства, и gc frendly
Alexander
размер O(sum(size строк))
eahqzsr
Константы тож значение имеют, знаете ли.
Danila Matveev
что хаскель медленнее питона (если не рвать ж*пу)
это повод для мыслей мейнтейнеров, не?
я с 0 опыта, напишу омерзительно медленный вариант (самый первый который был) и придется проходить по всем граблям потом
что из-за опыта опять же займет не 2 дня как здесь, а неделю (и потом осточертеет скорее всего)
Alexander
@lonokhov как мы её называли?
Alexander
там просто большой чанк строк друг за другом + вектор отступов + и длин
Alexander
по скорости примерно как bytestring-tree наверное помедленнее даже
Alexander
@A64m_qb0 а вот на маленьком файле у меня не воспроизводится баг..
Alexander
а на большом - есть..
Alexander
ха... на foobar нету ошибки а на строках из файла похоже есть
Alexander
чота мне это совсем не нравится
Alexander
руками введенная та строка норм, а head -n 1 > text.txt не работает