Dmitry
dmz@zen ~/tmp/bsfuck $ time ./v-stream < ./49zGQ6Zt.txt > /dev/null
real 0m1.635s
user 0m1.612s
sys 0m0.024s
Alexander
не
Cuno
Как?
input.read_to_string(&mut input) и вместо lines.iter() input.split('\n')?
Dmitry
но уже быстрее идеоматичного хаскеля
Dmitry
v-stream это уже жескач.
Alexander
буферизацию вывода запили
Маjко
Cuno
Alexander
чтобы чанки побольше были
Cuno
А эту кучу строк непонятно как там jemalloc раскидывает
Alexander
если write_all этого не делает
Vladimir
на чем остановились?
Anonymous
зач там буферизация
Alexander
даже в си в это упирается
Alexander
пишешь в буффер где-нибудь 110000 байт (константа из питона)
Alexander
как накопится - дампишь
Alexander
show next the strace :)
Alexander
s/next/me/
Dmitry
кто такие эти все collect unwrap и lock
Alexander
unwrap - это типа нашего fromJust
Alexander
или fromRight
Alexander
collect это fromList
Alexander
lock типа unsafeFreeze
Vladimir
зач там буферизация
короче если проставить профилирование, то парсинг ввода занимает 7 мс
Vladimir
остальное вывод
Dmitry
это везде так
Dmitry
потому что ввод там мелкий
Dmitry
а вот выхлоп большой
Vladimir
да
Alexander
в общем, буферизуйте вывод или какой-либо билдер/врайтер и обгоните
Anonymous
Alexander
да
Loo
Я обогнал хаскел
Dmitry
а этот большой вектор за буферизацию не считается?
Loo
В воображении
Loo
Dmitry
в него же выхлоп и пишется
Маjко
Anonymous
ооо
A64m
чего-то не пойму, он все в вектор накапливает и разом пишет что-ли?
Alexander
ой точно
Alexander
я просмотрел
Alexander
игнорируйте меня
A64m
это не годится
Vladimir
согласен
Anonymous
как лучше?
Vladimir
пиши порциями, как все нормальные
Dmitry
там получается квадрат от размера входа?
Alexander
порциями
Anonymous
а какого размера порции
Dmitry
у нас плюсовая прога такая была, работала тоскливо
Alexander
сделать буффер, как не может екстенднуться то флашить
Vladimir
кстати встроенный буфер вройте и правда говно какое-то
Alexander
у питона 110000
Dmitry
питон тоже околеет на большом вводе? или тоько вторая версия, с join которая?
Alexander
во всяком случае такими кусками он write делал
Alexander
которая с join может и околеет
Alexander
хз там умный jit
Dmitry
нет, там всё ок
Маjко
Alexander
у него AI и он дагадается по кускам писать
Dmitry
for p in pref:
print "\n".join([(p + s) for s in suff])
Dmitry
всё ок
Alexander
размер вектора N^2
Alexander
обычно все зависимости большие NlogN это значит что взорвется на достаточно большом входе
A64m
тот, кто задавал вопрос по производительности просто такой входной файл подготовил, он собирался писать вроде сотни гигов при небольшой доступной памяти
Vladimir
у питона 110000
учитывая что питон не самый быстрый, то не думаю что это норм тема копипастить с него
Alexander
ну pypy дал очень хорошие результаты
Alexander
не все люди на си и плюсах его сходу обогнали
Anonymous
только если без буфферинга вообще
Alexander
про малую память, сейчас все решения минимум O(N) по памяти
Alexander
т.к. минимум половину входных данных надо помнить
Dmitry
плюсы ничего не обогнали
Dmitry
dmz@zen ~/tmp/bsfuck $ time ./fu2.py < ./49zGQ6Zt.txt > /dev/null
real 0m4.655s
user 0m4.620s
sys 0m0.032s
dmz@zen ~/tmp/bsfuck $ g++ --std=c++11 -O2 ./fuck.cc -o fuck
dmz@zen ~/tmp/bsfuck $ time ./fuck < ./49zGQ6Zt.txt > /dev/null
real 0m5.738s
user 0m5.708s
sys 0m0.028s
Anonymous
рили? в чем там проблема?
Dmitry
cout в цикле 100500 сисколлов
A64m
плюсовик вроде и не пытался ничего оптимизировать выдал условно-нестрашную версию и на этом закончил
Dmitry
либо все в один выхлопной буфер и OOM
Dmitry
но тоже долго