Alexander
у меня ещё тут в haskell сегфолт, воспроизводящийся только на одной системе и не моей при том
Dmitry
но в итоге светлое будущее с Rust откладывается, походу
Dmitry
что-то он выглядит бледно
Alexander
причем сегфолтится ghc при TH
Alexander
так что с чтением coredump тоже будут проблемы, т.к. надо весь ghc пересобирать
Alexander
а зачем в этой задаче unsafe?
Alexander
в лучшей сишке операции только safe в терминах раста
Alexander
читаем данные, делаем вектор оступов и вектор длин, вроде в rust это называется slice?
Alexander
причем не 2 а один
Alexander
дальше 2 цикла (итератора в терминах раста)
Alexander
в одном по четным в другом по нечетным элементам
Alexander
складываем слайсы в buffer
Alexander
вызываем write_all когда перестает влезать
Anonymous
а чё раст? по-моему лучшую сишечку можно на расте сделать чтоб было то же самое
Dmitry
ну, не сделали
Alexander
ну вот выше я описал лучшую сишечку в терминах раста
Anonymous
ага
Alexander
а ну разве memcpy хак в расте сложнее
Dmitry
да моя вроде тоже сейф - я там попробовал идею с чанками фиксированного размера в unboxed vector как я его себе (неправильно) представлял
Anonymous
чисто техническая задача
Anonymous
мне интересно можно ли ещё хаскелл ускорить
Alexander
мне тоже
Dmitry
получается, что основная засада это реализация буферизации вывода
Dmitry
мало того, стандартные io буфера не работают
Alexander
я думаю если сделать unboxed вектор отступов то можно
Danila Matveev
они делали её вроде не столько по времени как вы упарывались
ну и во что там safe разворачивается вопрос, возможно unsafe нужен для обхода ограничений
Alexander
ну мы упарывались дня 2 на куче языков
Alexander
они упарывались 1-1.5 дня на одном
Dmitry
ну, куча это два
Alexander
правда нас больше
Dmitry
ну не фуллтам же.
Danila Matveev
хз, ощущение что фултайм)
Dmitry
мне там кто-то версию на баше прислал, но я её не хочу уже запускать
Danila Matveev
эт я ради фана попробовал, но там с переносами трабла, не стал уже разбираться
Alexander
@optician_owl а это т.к. людей много
Alexander
один уйдет, другой что-то пишет
Dmitry
@qnikst быстрее всего будет даже не список буферов для ввода, а
char **pages
, которому делать как раз realloc
Alexander
на haskell bytestring все таки дорогой, это ForeignPointer и финализатором (возможно пустым) и всеми делами
Alexander
@voidlizard наверное
Dmitry
и обходить потом быстрее. и копирование - копейки, если каждая страница достаточно большого размера
Alexander
в haskell отступы + длины + нужно навеное свой Builder для таких данных
Alexander
rawMem :: ByteString -> Offset -> Size -> Builder
Alexander
но это будет си какое-то
Dmitry
надо посмотреть, сколько на хаскелле занимает парсинг до момента вывода
Dmitry
мало или нет. было мало, но я уже не помню, насколько мало
Alexander
в моей версии оно "перемешано"
Alexander
мы ж каждый раз парсим
Dmitry
на хаскеле?
Alexander
да
Dmitry
а, у тебя там список строк
Alexander
vector
Alexander
но мы его сразу консьюмим
Alexander
поэтому не должен огорчать gc особо
Dmitry
да там и gc огорчается на копейки
Dmitry
т.е вдвое увеличить размер ввода - и это всё уже терятся на фоне времени вывода
Alexander
о как
Alexander
можно ещё попробовать fastBuilder переписать немного
Alexander
чтобы hPutBuffer получше сделать
Alexander
или уже свою либу писать по мотива длиннопасты вчера
Alexander
надо бы её куда-нить перенести, чтобы не потерять
Dmitry
смешно если IRL это всё бессмысленно, т.к. упрётся в скорость консюмера
Dmitry
и поэтому этот ввод-вывод никого не парит
Dmitry
хотя в серверах это важно, наверное
Alexander
я подозреваю что именно так
Alexander
вот тогда vmsplice полезен наверное
Alexander
мы просто странички сдампленные отдаем ядру и оно цепляет их к буфферу пайпы
Alexander
но на примерах с md5 и tee у меня плохо все было
Alexander
кстати tee забавный
Alexander
им броадкаст дешево делать
Alexander
можно посылаемое отдать ведру и оно не будет его копировать а само refcount поддерживать будет
Alexander
единственное, что я не понимаю, это когда страницы можно освобождать или переиспользовать
Alexander
где-то я видел, что когда будет записано 2*(размер буффера)
Alexander
но это какой-то ad-hoc
Dmitry
надо как-то резюмировать, что ли. самый лучший раст - на сколько-то процентов быстрее неидеоматичного хаскеля, и где-то в полтора раза быстрее идеоматичного
Dmitry
и все это в разы уступает лучшей версии на си
Dmitry
конкретно раст - в четыре раза
Dmitry
а в хаскеле отсутствует нормальная стандартная библиотека, которой можно пользоваться во всех случаях и не париться.
Alexander
да, похоже на хорошее резюме