Misha
https://mail.haskell.org/pipermail/cabal-devel/2012-September/009076.html
Misha
вот люди псят на него
Artyom
транзакций нет и приходится либо имплементить всю логику в acid-state методах, либо локи какие-то делать
Artyom
> unable to inspect the data это тоже
Artyom
> транзакций нет то есть, вот написал ты методы doA, doB они-то внутри атомарные, но чтобы вызывать их, тебе надо делать update DoA и update DoB и если ты сделаешь update DoA >> update DoB, это не будет атомарно а если хочешь, чтобы было атомарно, то придётся тебе писать новый метод doAandB и вызывать update DoAandB
Misha
а, это похабно, да
Artyom
и в такой метод даже функцию передать нельзя например, removeUsers :: (User -> Bool) -> Update () не может быть
Misha
ясно
Misha
я им пользовался как достаточно тупым хранилищем
Misha
типа "найти и если нет, то положить", и в таком качестве оно вполне пойдет
Artyom
согласен
Alexander
второе из distributed-static
Зигохистоморфный
https://www.youtube.com/watch?v=AGkSHE15BSs
Artyom
со статик поинтерами/serializable тоже нельзя?
статик пойнтеры как-то в голову не приходило попробовать
Alexander
другое дело, что непонятно как обновляться тогда
Artyom
то есть?
Artyom
а
Alexander
они ещё более program specific чем remote table
Artyom
не, обновляться понятно как
Alexander
поменял модуль и все поехало
Artyom
чекпойнт просто надо не забывать делать перед обновлением
Artyom
т.е. 1. всегда базу закрываем с createCheckpointAndClose, а не просто close 2. если решил обновиться после креша, ну сам виноват
Alexander
ну со статик поинтерами непонятно как их сохранять, чтобы следующая программа их прочитала
Alexander
с remote table-то понятно
Artyom
так они будут сохраняться только в event log, а в чекпойнтах их не будет
Artyom
получается, что если не обновлять программу с непустым ивент логом, то всё будет ок
Artyom
или я что-то не понимаю?
Alexander
а да
Alexander
логично
Artyom
а что такое вообще remote table?
Alexander
https://www.stackage.org/haddock/nightly-2017-06-22/distributed-static-0.3.5.0/Control-Distributed-Static.html
Alexander
грубо говоря Map String Dynamic
Alexander
передаешь на другой процесс String и он в таблице находит соотв функцию
Dmitry
а вот чем у нас лучше время мерять?
Dmitry
без лишних сисколлов
Anonymous
наручными часами
Anonymous
ноль сисколлов вообще
Alexander
точность низкая
Евгений
без лишних сисколлов
Лишних это как?
Max
без лишних сисколлов
gettimeofday вроде как тупо без сискола, из памяти вычитывает.
Max
Но я могу ошибаться с названием.
Max
Раньше был сискол, потом решили, что чета дохера дерганий контекста.
Max
В DPDK глянь.
Vasiliy
rdtsc
Aragaer
vdso
Aragaer
то есть не совсем сисколл, но и не совсем из памяти
Alexander
Ну gettimeofday и есть через vdso. Но не всегда
Alexander
мне лень искать другой чатик, но какой самый человеческий способ для запускаемой проги прибить все дочерние процессы если завелись
Alexander
при этом не сервис, т.е. напрямую на systemd/whatever и cgroups надеяться нельзя
Alexander
systemd-specific можно
Aragaer
послать какой-нибудь сигнальчик группе, а у себя лично его перехватить
Max
Или через DBus (спрятался)
Alexander
у меня если все в порядке все и так пришибается
Alexander
вопрос в случае, когда все не в порядке
Alexander
например, какая левая либа радостно заявила что надо выйти с SIGABRT или прилетел SIGKILL
Alexander
@mkrentovskiy а как dbus мне поможет?
Vasiliy
а что, если понадеяться на systemd и запускать с прожку с помощью systemd-run в отдельном скоупе, ну и убивать потом через systemctl?
Alexander
Vasiliy вотя посмотрел man sytemd-run и сходу не нашёл там интересного
Alexander
т.е. для юнита в целом там что нужно есть
Vasiliy
если скоуп сделать, он будет следить и за детьми процесса
Vasiliy
насколько я понимаю
Alexander
там от типа выхода зависит control-group, main...
Alexander
скорее всего control-group это по умолчанию
Dmitry
хаскел как он есть - перепутал размер чанка с числом потоков, и запускал не 8 потоков по 1000, а 1000 потоков по 8. и ничего, работало
Dmitry
только на 100K потоках начало умирать
Anatolii
не достаточно типизировал!:)
Dmitry
бгг
Artyom
спрошу тут
Artyom
у меня есть класс class Foo a where foo :: a как мне сделать вот такое? getFoos :: All Foo xs => Proxy (xs :: [*]) -> [a]
Artyom
без создания нового класса
Artyom
(All – это условная type family, которая говорит, что все типы в xs удовлетворяют констрейнту Foo)
Евгений
Ты экзистентиал хочешь или что?
Евгений
Непонятно что ты под а и * имеешь вот тут: getFoos :: All Foo xs => Proxy (xs :: [*]) -> [a]
Artyom
оййй
Artyom
class Foo tag where foo :: Tagged tag X
Artyom
getFoos :: All Foo tags => Proxy (tags :: [*]) -> [X]
Artyom
вот так
Artyom
ну и соответственно getFoos (Proxy @[A,B,C]) выдаст [untag @A foo, untag @B foo, untag @C foo]
Евгений
* это кайнд? А чо, из них списки можно делать уже? 🐌