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

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

За O(1)?

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

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

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

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

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

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