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

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

За O(1)?

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

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

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

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

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

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