Алексей
Ну пайпоспецифичность неизбежна. Как только стриминг делается явно — мы привязываемся к его API
Dmitry
мне кажется, можно написать что-то может не такое универсальное, как кондуиты, но намного более простое в использовании и внедрить это в стандартную библиотеку (которая вообще что такое?)
Алексей
Стандартная библиотека для написания факториалов
Dmitry
ну т.е подход
s <- readFile
приводит сразу к тому, что все надо обкладывать регрессионными тестами
Алексей
И тут сразу возникает проблема интеропа между простым решением и условными пайпами
Quet
на го не приходя в сознание написал что-то, но чет мд5 не сходится
там кие-то подводные камни есть? типа в конце не надо \n или еще чего?
Dmitry
обычная ошибка - \r в конце сроки или префик с суффиксом перепутал
Alexander
сейчас streaming самый простой
Alexander
@quetzal \r надо вырезать
Alexander
там \r\n переносы
Quet
в оригинальном файле \r\n переносы?
Dmitry
да, там \r
Dmitry
а в выхлопе - \n должны быть
Dmitry
@PineappleZombie если сделать нормальный дизайн IO библиотеки - то эти все пайпы может не нужны будут
Quet
ага сходится теперь
Quet
2.74
Alexander
кстати
Quet
но это прям ВООБЩЕ не думая о каких-то оптимизациях там
Alexander
в веткорах сейчас стриминг не факт что использует блоки
Dmitry
@PineappleZombie у меня на сях обычный подход
size_t readFile(int file, void *cc, bool (*consumer(void*, size_t len, char *data))
Dmitry
и ничо, жить можно.
Alexander
и копирует по символу, поидее можно улучшить используя этот новый интерфейс
Dmitry
@quetzal давай у себя запущу
Dmitry
у меня самый тормозной ноут на нём прогоняем
Dmitry
ну или запусти у себя pypy версию и относительно неё смотри
Alexander
я боюсь, что я не представляю как иметь разумные гарантии и не говорить о потоках явно
Quet
https://gist.github.com/quetz/4f9358724c70f4d92773e4a3714dce2e
Quet
go build spol.go
time ./spol 49zGQ6Zt.txt > /dev/null
Alexander
вообще я очень хочу осилить тапл с примерами кода и написанием компилятора и запилить какой-нить язычок где вот все эти стримы хорошо пишутся
Alexander
@quetzal stdin - requirement
Dmitry
@quetzal как это на линуксах быстрее всего собрать?
Алексей
На сях прихдится делать явно всё
Alexander
читать из stdin - писать в stdout обязательно
Quet
ну в стдаут и пишет
Quet
ща, чтение
Dmitry
@quetzal 3.58
Dmitry
так, где там моя ставка
Leonid 🦇
@voidlizard nix-shell -p go
Leonid 🦇
/stat@combot
Combot
combot.org/chat/-1001043143583
Dmitry
лучше pypy
Dmitry
не, ну что - как наивная версия на расте
Алексей
Если явных стримов нет, то чтобы иметь какие-то гарантии их придётся каждый раз изобретать руками. Если задача хорошо ложится на потоковую обрабутку и трансформаций потока несколько, то пайпы это спасение
Combot
combot.org/chat/-1001043143583
Leonid 🦇
ну вы олимпийцы
Alexander
в общем я придумал 3 улучшения для си, но я не буду их делать
Alexander
у нас community health аж 40% в статах =)
Quet
https://gist.github.com/quetz/4f9358724c70f4d92773e4a3714dce2e
Dmitry
go это фронтенд к gcc ?
Quet
ну вот stdin
Quet
для тех архитектур где гугловый компилятор не заводится
Dmitry
dmz@zen ~/tmp/bsfuck $ time ./spol < 49zGQ6Zt.txt > /dev/null
real 0m3.628s
user 0m3.616s
sys 0m0.012s
Dmitry
как у первого варианта на расте
Quet
не ужасно короч
Quet
учитывая что пишется за 5 минут
Quet
и ваще без включения мозга
Dmitry
синт. мусора поменьше, чем в расте, но в целом синтаксис странноватый
Dmitry
но не сильно
Quet
а давай тупую буферизацию еще?
Alexander
он одну большую строку делает?
Quet
https://gist.github.com/quetz/4f9358724c70f4d92773e4a3714dce2e
Alexander
а не
Alexander
вот haskell-ным либам не хватает bufio
Кабачок
Кабачок
аж целый один)
Alexander
LBS.putStr $ toLazyByteString $ builder более дорогая абстракция
Dmitry
dmz@zen ~/tmp/bsfuck $ time ./spol < ./49zGQ6Zt.txt > /dev/null
real 0m3.622s
user 0m3.620s
sys 0m0.004s
Anonymous
на luajit не вышло сделать быстрее pypy ((
Dmitry
тупо буферизация не помогла
Alexander
да даже hPutBulder builder
Dmitry
хотя добавляется легко
Alexander
кстати, надо почитать исходники hPutBuilder что там тормозит
Quet
у меня помогла
и вместо строчки newline делать символом тож
https://gist.github.com/quetz/4f9358724c70f4d92773e4a3714dce2e
оттак
Quet
у меня 2.35 в итоге
Dmitry
собирать - вот так: go build ./spol.go ?
Dmitry
или есть хитрости?
Anonymous
а, уже написали на го?
Quet
не, прям так
го 1.9
Quet