↑↑↓↓←→←→ⒷⒶ Войти !bnw Сегодня Клубы
хмм, как бы красиво сделать ленивый лог такая спископодобная структура, в которую можно добавить элемент в конец, из которой можно прочесть любые элементы, и которая блокирует читателя если элемента ещё не существует и всё это в STM
#F6L9KQ / @l29ah / 3007 дней назад

можно добавить элемент в конец

За O(1)?

можно прочесть любые элементы
блокирует читателя если элемента ещё не существует

Т.е. «прочитать» = «изъять»? Опиши подробней, как это работает.

#F6L9KQ/CB9 / @minoru / 3007 дней назад
@minoru Вот я тоже ни хрена не понял что он хочет.
#F6L9KQ/TCI / @ndtimofeev --> #F6L9KQ/CB9 / 3007 дней назад
@minoru Да, O(1). Нет, недеструктивно прочесть канеш. Как лог блять. Видел блядь лог когда-нибудь?
#F6L9KQ/KZQ / @l29ah --> #F6L9KQ/CB9 / 3007 дней назад

@l29ah Проиграл с вопроса; да, видел. Но все равно не понимаю, что за «блокировать читателя если элемента не существует». Ты, видимо, забыл описать метаинформацию, которая с каждой записью ассоциируется и по которой потом можно эти записи фильтровать и запрашивать?

#F6L9KQ/41A / @minoru --> #F6L9KQ/KZQ / 3007 дней назад
@minoru Индекс блять. Который size_t. Когда-нибудь файл видел? Это файл будет. Натуральный файл, экспортирующийся через 9P. Чтобы мог желающий на него подсесть и смотреть че там у хохлов в реальном времени.
#F6L9KQ/KWT / @l29ah --> #F6L9KQ/41A / 3007 дней назад
@l29ah То есть ты элементы списка подсасываешь через сеть/медленный интерфейс?
#F6L9KQ/KS8 / @ndtimofeev --> #F6L9KQ/KWT / 3007 дней назад
#F6L9KQ/8KL / @l29ah --> #F6L9KQ/KS8 / 3007 дней назад
@l29ah Чтение элемента запускает синхронизацию если элемента нет в кэше?
#F6L9KQ/J00 / @ndtimofeev --> #F6L9KQ/8KL / 3007 дней назад
@ndtimofeev Чтение элемента запускает sleep(). Представь себя syslogd.
#F6L9KQ/VMJ / @l29ah --> #F6L9KQ/J00 / 3007 дней назад
@l29ah А кто тогда запускает синхронизацию?
#F6L9KQ/NA7 / @ndtimofeev --> #F6L9KQ/VMJ / 3007 дней назад
@ndtimofeev Специальный гномик живёт в отдельном треде, ловит иксэмэли из XMPP и перерабатывает их в лог.
#F6L9KQ/BIL / @l29ah --> #F6L9KQ/NA7 / 3007 дней назад
@l29ah Представь себе ежа в 11-мерном пространстве.
#F6L9KQ/WQB / @ndtimofeev --> #F6L9KQ/VMJ / 3007 дней назад
@ndtimofeev Как это релевантно?
#F6L9KQ/9FB / @l29ah --> #F6L9KQ/WQB / 3007 дней назад
@l29ah Примерно также как и syslogd. То есть ни хуя не релевантно и не по делу.
#F6L9KQ/2KC / @ndtimofeev --> #F6L9KQ/9FB / 3007 дней назад
@l29ah Помоему ты изобрёл Chan/TChan. С Новым годом.
#F6L9KQ/QYV / @ndtimofeev --> #F6L9KQ/VMJ / 3007 дней назад
@ndtimofeev Ты уёбок блять. Где у Chan семантика массива?
#F6L9KQ/JP9 / @l29ah --> #F6L9KQ/QYV / 3007 дней назад
@l29ah Сорь. Ты описал семантику связного списка. Chan это связный список. Либо объясни что ты называешь семантикой массива, либо на хуй иди.
#F6L9KQ/QI2 / @ndtimofeev --> #F6L9KQ/JP9 / 3007 дней назад
#F6L9KQ/8I3 / @l29ah --> #F6L9KQ/QI2 / 3007 дней назад
@l29ah Это невнятный шум для экстрасенсов.
#F6L9KQ/2NR / @ndtimofeev --> #F6L9KQ/8I3 / 3007 дней назад
@ndtimofeev Какое слово не ясно?
#F6L9KQ/LCJ / @l29ah --> #F6L9KQ/2NR / 3007 дней назад
@ndtimofeev Видел read(2) когда-нибудь?
#F6L9KQ/TE6 / @l29ah --> #F6L9KQ/2NR / 3007 дней назад
@l29ah Нет
#F6L9KQ/QJP / @ndtimofeev --> #F6L9KQ/TE6 / 3007 дней назад
@ndtimofeev man 2 read
#F6L9KQ/Z00 / @l29ah --> #F6L9KQ/QJP / 3007 дней назад
@l29ah Спасибо. Иди на хуй.
#F6L9KQ/ZUQ / @ndtimofeev --> #F6L9KQ/Z00 / 3007 дней назад
@l29ah > Индекс блять. > Который size_t. > Это файл будет. > Чтобы мог желающий на него подсесть и смотреть че там у хохлов в реальном времени.
#F6L9KQ/ZVB / @ndtimofeev --> #F6L9KQ/LCJ / 3007 дней назад
@ndtimofeev Ты блять хули тебе не понятно блять? Файлы никогда не читал???? Я хочу тупо сука файл который можно читать как обычный файл, с тем лишь отличием, что если его дочитать до конца и пытаться читать моар, он не вернёт ноль байтов а заблокируется и вернёт новую инфу когда в бекенд её принесут.
#F6L9KQ/10H / @l29ah --> #F6L9KQ/ZUQ / 3007 дней назад
@ndtimofeev И хули?
#F6L9KQ/TDB / @l29ah --> #F6L9KQ/ZVB / 3007 дней назад
@l29ah Исходя из этого я должен интуитивно угадать что тебе нужно.
#F6L9KQ/SAS / @ndtimofeev --> #F6L9KQ/TDB / 3007 дней назад
@ndtimofeev Можешь ещё вопросы спрашивать.
#F6L9KQ/1BA / @l29ah --> #F6L9KQ/SAS / 3007 дней назад
@l29ah Окей. Давай я интуитивно решу что 4 пункт не нужен. Первые три у меня в голове не связаны вообще. Какие вопросы я должен задать тебе кроме «под чем ты?» или «что ты хочешь?».
#F6L9KQ/Z7K / @ndtimofeev --> #F6L9KQ/1BA / 3007 дней назад
@ndtimofeev Хули ты блять /10H игнорируешь пидр?
#F6L9KQ/V27 / @l29ah --> #F6L9KQ/Z7K / 3007 дней назад
@l29ah Тогда ты хочешь data List a = Cons a (TVar (Maybe (List a))) | Nil в худшем случае. Можно просто заебенить список, где хвост будет fix $ \next -> unsafePerformIO $ atomicaly (readTMVar var) >>= \xs -> return (xs ++ next)
#F6L9KQ/CQP / @ndtimofeev --> #F6L9KQ/10H / 3007 дней назад
@ndtimofeev a это Word8. Что делать бум чтобы не обоссаться от охуительной эффективности всего этого для хранения десятков мегабайт?
#F6L9KQ/12R / @l29ah --> #F6L9KQ/CQP / 3007 дней назад
@ndtimofeev Бля я боюсь unsafePerformIO, оно мне ногу не откусит?
#F6L9KQ/W27 / @l29ah --> #F6L9KQ/CQP / 3007 дней назад
@l29ah Нет. Тут хуже то что нет никакой возможности не заблокироваться.
#F6L9KQ/CIQ / @ndtimofeev --> #F6L9KQ/W27 / 3007 дней назад
@l29ah data ListWord8 = Cons ByteString (TMVar (ListWord8 a)) | Nil
#F6L9KQ/XB5 / @ndtimofeev --> #F6L9KQ/12R / 3007 дней назад
csp + параллельное считывание в список
#F6L9KQ/M9O / @anonymous / 3007 дней назад
@ndtimofeev Как мне за O(1) перейти на любую позицию?
#F6L9KQ/DQY / @l29ah --> #F6L9KQ/XB5 / 3007 дней назад
@l29ah Никак, соси хуй. На самом деле берёшь ByteString и переходишь.
#F6L9KQ/2O4 / @ndtimofeev --> #F6L9KQ/DQY / 3007 дней назад
@ndtimofeev Че блять, у тебя там не один байтстринг.
#F6L9KQ/PIZ / @l29ah --> #F6L9KQ/2O4 / 3007 дней назад
@l29ah Если ты хочешь строго O(1) то идёшь на хуй, я же сказал. В реальном мире у тебя либо совсем говно какое-то, либо ByteString'и достаточно велики чтобы быстро перебрать несколько в поисках того где лежит твой элемент.
#F6L9KQ/8CS / @ndtimofeev --> #F6L9KQ/PIZ / 3007 дней назад
@ndtimofeev В реальном мире меня читает какой-нибудь уёбищный dd блоками по 512 байт сикая каждый раз.
#F6L9KQ/KCB / @l29ah --> #F6L9KQ/8CS / 3007 дней назад
@l29ah Так в реальном мире ты и подгружаешь данные блоками по 4096 байт и твои байтстринги велики.
#F6L9KQ/V31 / @ndtimofeev --> #F6L9KQ/KCB / 3007 дней назад
@l29ah Как вариант ты можешь сделать TVar (ByteString, STM Word8). Тогда тот кому не хватило байта в массиве, лочится на STM'е, а когда байт приходит перезаписываешь структуру и массив на хуй.
#F6L9KQ/6DI / @ndtimofeev --> #F6L9KQ/KCB / 3007 дней назад
@ndtimofeev В реальном мире у меня десяток мегабайтов этих байтстрингов, и чтобы его вычитать мне нужно сделать O(10000000^2/4096/512) запросов.
#F6L9KQ/J35 / @l29ah --> #F6L9KQ/V31 / 3007 дней назад
@ndtimofeev Нет я сосу хуй, поскольку тут я никак не могу залочиться на определённом по номеру байте.
#F6L9KQ/05V / @l29ah --> #F6L9KQ/6DI / 3007 дней назад
@l29ah Няп твоя штука в заблокированном виде не будет доступна на чтение ни для кого.
#F6L9KQ/29D / @l29ah --> #F6L9KQ/05V / 3007 дней назад
@l29ah Нет, ты не сосёшь хуй, а ленивый и тупой. TVar (ByteString, Offset -> STM Word8)
#F6L9KQ/JDQ / @ndtimofeev --> #F6L9KQ/05V / 3007 дней назад
@l29ah Почему? До тех пор пока не пришли новые данные, старые данные доступны. Данные недоступны только пока идёт перезапись.
#F6L9KQ/N1M / @ndtimofeev --> #F6L9KQ/29D / 3007 дней назад
@l29ah Блокируется только тот, кто хочет данных которые вышли за границу массива. Да, ты будешь при каждом запросе проверят out of range. Ничего не поделаешь это флеш.
#F6L9KQ/XJE / @ndtimofeev --> #F6L9KQ/29D / 3007 дней назад
@ndtimofeev Тот кто заблокировался за границей блокирует всех кто тоже хочет за границу, причём отпускат только когда удовлетворит свою жажду, иначе яннп чо ты там делаешь с этим байтом и из контекста кого.
#F6L9KQ/XZZ / @l29ah --> #F6L9KQ/XJE / 3007 дней назад
@l29ah Ох… Тебе нужна структура внутри которой находится TVar с твоим массивом и функция которая пытается в STM'е почитать байт в произвольной позиции. Если ты не вылетел за границы массива, отдал байт. Если вылетел, то залип до тех пор пока не вылетел (то есть до тех пор пока TVar не обновили). Ну какого хера тебе не понятно?
#F6L9KQ/CT4 / @ndtimofeev --> #F6L9KQ/XZZ / 3007 дней назад
@ndtimofeev Механизм залипа/отлипа.
#F6L9KQ/QAR / @l29ah --> #F6L9KQ/CT4 / 3007 дней назад
@l29ah Когда ты выполняешь транзакцию внутри которой тем или иным образом вызван retry рантайм ghc не станет её повторять до тех пор пока не обновят хотя бы один TVar из тех что в ней участвовал. То есть в твоём случае TVar с байтстрингом.
#F6L9KQ/2OZ / @ndtimofeev --> #F6L9KQ/QAR / 3007 дней назад
@l29ah Я надеюсь про то что лучше вместо чтения байта делать слайсы, ты как-то догадаешься сам.
#F6L9KQ/2G6 / @ndtimofeev --> #F6L9KQ/QAR / 3007 дней назад
@ndtimofeev Log = Log (TVar ByteString, Off -> Len -> STM ByteString) ?
#F6L9KQ/VNY / @l29ah --> #F6L9KQ/2G6 / 3007 дней назад
@l29ah Типа того. В принципе функцию можно держать вообще отдельно.
#F6L9KQ/94H / @ndtimofeev --> #F6L9KQ/VNY / 3007 дней назад
@l29ah Хотя не, зачем туда паковать функцию, когда можно её просто в топлевел положить.
#F6L9KQ/NPJ / @l29ah --> #F6L9KQ/VNY / 3007 дней назад
@l29ah Это.
#F6L9KQ/NVL / @ndtimofeev --> #F6L9KQ/NPJ / 3007 дней назад
finger tree уже предлагали?
#F6L9KQ/IXG / @anonymous / 3007 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.