
Nikita
16.05.2017
19:46:42
редко где такое встречается

Max
16.05.2017
19:47:47
я и с ерланга на еликсир сбежал, когда на питоне пописал прилично
понял, что на ерланге не жизнь

Google

Max
16.05.2017
19:48:22
Фи, перебежчик
Питон тебя покусал

Max
16.05.2017
19:49:16
на х-е давно не писал, кстати
надо бы ещё чёнить наваять

Alexander
16.05.2017
19:50:18
=)

Arseniy
16.05.2017
19:57:59
Тестнет уже во всю бегает :)

Alexander
16.05.2017
19:59:27
вы вообще нехорошие люди, с WT сотрудничаете, с FPC сотрудничаете, а чего с нами не сотрудничаете?
=)

Max
16.05.2017
19:59:32
что такое serokell.io?

Alexander
16.05.2017
19:59:42
рабочие руки IO HK
https://iohk.io/
хм.. чего-то у меня мегамодный сайт этот не работает сегодня

Google

Misha
16.05.2017
20:00:40
как интересно, как послушаешь, так у хаскелистов больше компаний, чем людей

Max
16.05.2017
20:01:01
ну так один х-ст может работать в нескольких компаниях

eugene
16.05.2017
20:01:10

Alexander
16.05.2017
20:01:29
ладно со второй попытки заработал

Max
16.05.2017
20:01:44

Alexander
16.05.2017
20:02:02
но наверное люди отуда расскажут, кто такие serokell.io и hkio лучше меня, так что я помолчу

eugene
16.05.2017
20:02:03

Alexander
16.05.2017
20:03:32
или и то и другое
@jagajaga на самом деле если подробнее расскажете то будет всяко интереснее

Arseniy
16.05.2017
20:08:03

Alexander
16.05.2017
20:09:25

Arseniy
16.05.2017
20:11:54
tweag I/o
Пока нет необходимости к сотрудничеству, но буду знать! Огромное спасибо за информацию, не слышал о вас :)

Alexander
16.05.2017
20:13:31
можете о нас у Дункана спросить, он нас немного знает
: )

Arseniy
16.05.2017
20:15:36
Serokell -- аутсорсиноговая компания, пишем на хаскеле (и related вещах, например purescript), используем nix и nixos, применяем магию. На данный момент тесно дружим с IOHK, вместе разрабатываем криптовалюты и всякие исследования делаем.

? animufag ?
16.05.2017
20:18:54
кроме суперлаконичного сайта есть что-нибудь?

Google

? animufag ?
16.05.2017
20:19:18
общественная дейтельность. открытые либы, выступления, статьи

Arseniy
16.05.2017
20:19:46
github.com/input-output-hk/cardano-sl весь код наш, например
Посколько мы на аутсорсе работаем, то у нас в github.com/serokell мало всего

? animufag ?
16.05.2017
20:24:48
о, ну хотя бы на прелюд можно посмотреть

Arseniy
16.05.2017
20:25:04
Кстати, мы ищем разработчиков! :)
Пишите в личные сообщения, если интересно.

Alexander
16.05.2017
20:27:25
вот обращайтесь к нам будут разработчики :D

Kit
16.05.2017
20:27:57
https://t.me/haskelljob
а что вы в этом чатике не пишете?
там так уныло

Artyom
16.05.2017
20:28:30
аутсорс аутсорса? IOHK будут довольны :troll:

Kit
16.05.2017
20:28:32
давайте использовать по назначению

Alexander
16.05.2017
20:30:19
дешевле, чем FPC выйдет, насколько я знаю, и не хуже ?

Arseniy
16.05.2017
20:31:55
Но у вас нету кипы у директора, наверное!

Alexander
16.05.2017
20:32:23
пинайте через Дункана, он может сказать хорошее слово
наверное, во всяком случае год назад бы точно сказал

Arseniy
16.05.2017
20:33:06
Пока нет необходимости к сотрудничеству, но буду знать! Огромное спасибо за информацию, не слышал о вас :)

Misha
16.05.2017
21:54:55
а кто знает как сделать такой async ioAction, чтобы ioAction запускался лениво только тогда, когда был вызван wait?

Artyom
16.05.2017
21:55:16
unsafeInterleaveIO не работает?

Misha
16.05.2017
21:55:37
не пробовал, но это какой-то хардкор сразу
так, начал писать, чего же мне надо и понял, что оно и не должно было работать

Google

Misha
16.05.2017
21:57:03
надо еще думать

Alexander
16.05.2017
22:02:49
можно сделать так что действие запустится когда твой s используют:
let ~s = unsafePerformIO $ async $ ...
тогда как только кто-то зафорсит s
то действие запустится
unsafeInterleaveIO все же другую семантику по сравнению с async имеет
если с wait одного треда они не различимы
то уже с wait из разных или ожидании через STM разница будет


Misha
16.05.2017
22:09:07
в целом задача вот такая:
newtype Pr a = Pr (IO (Async a))
getOrCreateP :: TM.Map k (Pr a) -> k -> (k -> IO a) -> STM (Pr a)
getOrCreateP prs k fromIO = TM.lookup k prs >>= \case
Nothing -> do
let pr = Pr (async (fromIO k))
TM.insert pr k prs
return pr
Just pr -> return pr
то есть идея в том, чтобы по ключу k на каждый запрос создавать ровно один promise, на который мы потом по выходу из транзакции сделаем wait. Но штука в том, что я вижу дофига запущенных fromIO на каждый ключ
то есть либо я что-то фундаментально не так думаю
либо фиг знает
TM - это мап из smt-containers
получается, с одной стороны понятно, что async (fromIO k) может вызываться на каждый рестарт транзакции и это нормально, но выполняться-то он не должен вообще никак
в общем, буду трейсом смотреть, что там происходит


Alexander
16.05.2017
22:19:52
эм у тебя ж лежит IO действие в контецнере
и каждый кто его вызывает создаёт новый тред
я с телефона уже не могу скопировать код, но могу сказать идею
у меня есть тип:
data F = Starting (STM a)| Value a| Stopping (STM ())
запись в Мапу регистрирует тебя и ты потом делаешь IO действие и кладешь ответ, другие ждут
и.е. Nothing -> Starting -> Value
первый тред меняет Nothing на Starting и ему возвращается действие которое он должен выполнить когда создаёт переменную (вызовет async у тебя)

Google

Alexander
16.05.2017
22:23:53
другие треды если поищут к - получат срартинг
и просто вызовут atomically $ action
stopping тут не ыажно
ну и про исключения смотреть надо, т.к. тут хитро
с другой стороны треды если видят стартинг могут просто retry сделать - этого достаточно будет
и.е. ещё раз, есть Map (Maybe (Either () a))
a=Async x
тред делает lookup >>= \case {Nothing -> write Just (Left ()) return Nothing; Just Left{} -> retry ; Just Right{x} -> return Just x}
и maybe (async >>= \x -> atomically update x) return на ответ
update = lookup>>= case Nothing-> write Just (Right x); Just{} -> invariantViolation
Misha ^^ как-то так, у утра могу по человечески написать

Misha
16.05.2017
22:43:32
ага, я примерно так и подумал в итоге, что надо data P a = Empty | Working (IO a), сначала класть Empty а уже после завершения транзакции вызывать async
правда все усложняется конечно

Alexander
16.05.2017
22:52:29
ты не запускаешь тред в транзакции
ты кладешь туда действие которое когда выполнится создаст асинк
в твоём текущем кода

Misha
16.05.2017
22:53:35
тогда он должен быть только один на каждый ключ

Alexander
16.05.2017
22:53:39
это действие
его можно выполниьь
хоть одно оно хоть 5 каждый запуск создаст новый async