Alexander
питон тупо шпарит write(stdout,"...",110000)
Alexander
я хочу сейчас ради интереса с unix сделать
Dmitry
Он полл делает
Dmitry
Потому, что шедулер
Dmitry
По идее, если писать большими шматками, можно это превозмочь
Dmitry
Казалось бы.
Alexander
я убрал poll и write(stdout,"",0)
Alexander
но все равно ещё секунда
Alexander
можно через unix напрямую с FD работать
A64m
так это с обычным билдером еще?
Alexander
2.67 vs 3.68
Alexander
@A64m_qb0 да
Alexander
у fast-builder можно размер чанков менять?
A64m
сейчас посмотрю (я раньше с ним старался не связываться)
Alexander
есть
Alexander
@A64m_qb0 3.09s
Alexander
3.02 с выводом вечер unix, 3.12 с стандартным
Alexander
3.24 hPutBuilder
A64m
и адовый код. очередная победа избегания успеха
A64m
нет, пут билдер адово тормозной почему-то
A64m
у меня вообще было 4.9 и 10 c путбилдером
Alexander
3.08-3.12 вполне нормальный код
Alexander
3.02-3.03 - уже нет, т.к. platform specific и вообще я его нечестно сделал, я не проверяю что не все записалось и вообще fdWrite unsafe ffi
Alexander
с safe_ffi 3.15
Dmitry
Короче, проблема в io
A64m
это то вообще по ту сторону добра и зла.
Alexander
в общем не надо использовать unix напрямую
Alexander
почему-то BSL.hPut вполне хорошо себя ведёт
A64m
даже тот что "нормальный" - адище по сравнению с питоновским пятистрочником, и это для меня, ненавидящего питон как мало что
Dmitry
А дай гист посторонней Юлия последней версии?
Dmitry
Т9
Dmitry
Последней
Alexander
https://gist.github.com/qnikst/a06ebe89274fd56b58372e3f9e37ba76
Dmitry
Тут ведь никакого профита нельзя извлечь от распараллеливания?
Alexander
там Extra.hPutStr его можно забороть
Alexander
убрать т.е. и LBS взять
Alexander
он всреднем получше, но в рамках погрешности
Alexander
я думаю, что нет
Alexander
вообще питон совершенно туп и работает хорошо
A64m
только глюков от фастбилдера получить
Alexander
@voidlizard точнее можно, но наверное сложнее
Alexander
stats посмотреть размер файла, каждому считать свой кусок, обработать, потом выдать в stdout
Alexander
начиная с какого-то размера файла оно будет выгоднее
Alexander
но
Dmitry
Ну по идее этот полл это плата за ио шедулер, я так думаю
Alexander
этот пол из-за wantWriteableHandle
Alexander
который в hPut строгой байтстроки
Alexander
типа оно будет лучше если handle нифига не готов
Alexander
тогда мы просто положим поток в спячку и увидим
Dmitry
А схрена ли?
Dmitry
Он не готов
Alexander
ну у нас нету ни jit ни libastral
Alexander
впрочем stdout может быть и не готов
Alexander
если кто там tmux включил и утопал наверх в режиме просмотра истории
Alexander
я себе так программы блочил, у которых logger hPutStrLn делает
Alexander
но в данном случае плата за обобщенность это -1/3 производительности получилось
Alexander
что как-то многовато
Alexander
кстати тут интереснее как автор предлагал - полный файл
Alexander
поидее на haskell написать чтобы оно стримилось вполне реально
Dmitry
Ну, наивные попытки ничего не дают
Alexander
без лишней нагрузки на мозг
Alexander
в этой задаче он и так жрет меньше, при -A16m
Dmitry
Целый файл писать
A64m
вообще в хаскеле если пишут про библиотеку "быстрая" то это значит "по сравнению со старой библиотекой для того же, которая работала со скоростью континентального дрейфа", а если с чем-то на другом языке сравнивать, то это днище
Alexander
вот, в общем я убрал write(1,"",0) - проверку на готовность
A64m
да никто и не сравнивает
Alexander
могу выложить, все равно хотел
Anonymous
а идрис с си бекендом как по сравнению с хаскелем?
Alexander
идрис вообще дно
A64m
хотя нет, вроде в репе текста есть бенчмарки для других языков, только вот результатов я не помню чтоб где-то видел
Alexander
с любым бекендом, кроме в программиста на нормальном языке
Anonymous
лол
A64m
@anarchostatist я как-то раз написал пятистрочник, который на хаскеле работал 5 сек а на идрисе половину суток (не шутка)
Anonymous
ЛОЛ
Anonymous
какой
Alexander
хорошо там хотя бы тайпчеккер чинят
Alexander
год назад я бы сказал что и он поломан
Alexander
но сейчас уже вроде на том уровне на каком я знаю идрис все в порядке
Alexander
(околонулевой)
A64m
уточнение: на хаскеле это пятистрочник, на идрисе скорее пятидесяти