Alexander
для set bytestring-ов
Alexander
т.е. что юзеру не видно, а так большой чанк памяти + массив отступов
A64m
вы вроде бинарный поиск по хранящимся одним куском байтстрингам делали
Alexander
угу
A64m
и там сет иммутабельный был
Anonymous
так чего по итогу? насколько питон обогнали?
A64m
раза в два
Alexander
1.35-1.45 vs 2.22-2.36 в пользу haskell
Alexander
в полтора на моём ноуте
A64m
даже и не в два
Alexander
но это без ада с FD и т.п.
Alexander
щас их попробую
A64m
правда с использованием библиотек у которых внутри фрактал ада
Anonymous
почему никто ещё не инкапсулировал весь этот ад в либу для быстрого io?
A64m
это ж много работы
Alexander
хаки с IO не дают больше 1-2% тут
Alexander
сделать их правильно - тяжело
Alexander
еще и обобщенно
Alexander
мерять нормально задолбаешься
Alexander
1-2% это в пределах погрешности
Anonymous
а в чем ботлнек был изначально?
Alexander
грубо говоря 2шт: 1. list 2. неудачные дефолты для этой задачи в IO
Alexander
первое решается вектором
Alexander
второе решается fast-builder-ом с большим чанком
Alexander
но второе я бы в реальном не числодробильном проекте бы использовать не стал
Alexander
питон с jit наверное может себе это позволить
Alexander
увидеть что там stdout и пойти в fast-path
A64m
да я так понял, там просто более разумный дефолтный размер для чанка
A64m
ну а байтстринг при использовании штатного анлайна дубасил бы по системному вызову на каждые три байта, вместо того чтоб чанки укрупнить перед выводом
eahqzsr
С дефолтным билдером работает не оч. А с fast-builder попробую завтра.
Alexander
кстати в коде base описаны прикольные не сделанные оптимизации
Alexander
с дефолтным даже при большом чанке - 4с
Alexander
в 2 раза хуже примерно
eahqzsr
А как там рулить размером чанка?
Alexander
через import Data.ByteString.Builder.Extra
Alexander
toLazyByteStringWith
A64m
да, автор фастбилдера не зря старался
Alexander
вообще я честно говоря поражен
A64m
(и реквестировал всякие фичи вроде ваншот аннотаций не только для функций над Type)
A64m
я когда его прочел побоялся понять на каких кругах ада он оперирует
A64m
комментарии по поводу потоков в документации тоже неизгладимое впечатление оставили, конечно
eahqzsr
Всем спасибо, я на сегодня все. Завтра почитаю еще.
Alexander
а я хотел в 9 лечь спать :(
Dmitry
Какой итог?
Dmitry
Надо использовать фастбилдер?
eahqzsr
Питон победили ценой нескольких человекочасов.
Dmitry
И вектор вместо списка
A64m
@voidlizard ну. если не страшно использовать пакет с документацией вроде такой > Performance hint: when the resulting ByteString does not fit in one chunk, this function forks a thread. Due to this, the performance degrades sharply if you use this function from a bound thread. Note in particular that the main thread is a bound thread when you use ghc -threaded. To avoid this problem, do one of these: Make sure the resulting ByteString is consumed in an unbound thread. Consider using runInUnboundThread for this. Use other function to run the Builder instead. Functions that don't return a lazy ByteString do not have this issue. Link your program without -threaded.
Ilya
Какой итог?
Ilya
Питон победили ценой нескольких человекочасов.
Ilya
Теперь надо попробовать c++ победить!
Ilya
Реально это?
A64m
нет
Ilya
А насколько плюсы быстрее, не мерили?
A64m
нет
Ilya
На SO видел несколько раз, как хаскель обгонял чистый си
Ilya
Но там не IO был конечно
A64m
Хаскель имеет хорошие перспективы обогнать какой-нибудь язык, если пытаться писать на этом языке как на хаскеле, но так никто не делает
Alexander
а ещё вывод, похоже в байтострокобилдере бага
Alexander
надо будет завтра копать чтож там такое
A64m
этот баг воспроизводится в фастбилдере, так что баг куда хуже, он не байтстрингоспецифичный
A64m
на фичу не похоже
Dmitry
слуште. у меня идеоматичная версия на обычном билдере - в два раза быстрее, чем pypy версия
Dmitry
сейчас зачищу от лишнего
Dmitry
просто Builder, просто списки
Dmitry
6 секунд против 13
Dmitry
для pypy
Alexander
давай, интересно
Dmitry
https://gist.github.com/voidlizard/83c06a758b20697019aa063b16cded94
Dmitry
да я вообще там ничего не делал, только Builder.hPutBuilder использовал
Dmitry
всё остальное вернул к идеоматичному виду
Dmitry
вектора в топку
Dmitry
настройки буферизации убрал
Dmitry
генерируемые файлы идентичны.
Alexander
нормальный вид с векторами ^_^
Alexander
дойду до ноута посмотрю, очень интересный результат
Dmitry
вчера использовали hPutBuilder ?
Alexander
он плох был
Alexander
у меня