Ayrat
евейтеры, стейтмашины и пр
Vladimir
Screenshot (27 мая 2020 г. 0:57:24)
Vladimir
вот и бенч прилагается)
Ayrat
@Lanayx https://github.com/dotnet/fsharp/issues/9258#issuecomment-634302877
Ayrat
больше хаков богу хаков!
Ayrat
type Conv =
Ayrat
объявлен
Vladislav
перевод
Vladislav
я про это
Ayrat
хз
Ayrat
Convenient?
Vladimir
больше хаков богу хаков!
постеснялся бы такое предлагать)
Vladislav
вообще чет я в ретроспективе жалею что UMX юзал
Vladislav
в боте
Vladislav
да хз, какой-то запашок от него
Vladislav
ну ты понял
Ayrat
постеснялся бы такое предлагать)
я думаю мой вариант более хакнутый (поинтеры совсем грязь), но более удобный
Ayrat
у него там ещё тип обёртка неудобный
Vladimir
не уверен
Ayrat
да хз, оба варика сделаны "смотрие как могу"
Ayrat
я вот свой просто для ржаки предложил
Ayrat
он вероятно тоже
Vladimir
возможно)
Vladimir
интересно если сделать бокс анбокс Джит соптимищировал ли бы
Ayrat
ну это совсем UB
Ayrat
тут соптимизировал, там нет
Ayrat
ты ж делаешь либу, которую хуй знает где запускать будут
Ayrat
вон даже фул фреймворк пытаешься поддерживать
Vladimir
это да
Ayrat
в таких сценариях UB писать, когда ты не контролируешь рантайм - ногу себе отстреливать
Denis
Кстати, вопрос А кто что думает по поводу всяких Rx ?
Denis
наткнулся тут на fable reaction
Denis
интересно что за зверь этот ваш реэктив
Denis
Чаво
Denis
Ну т е выглядит это как то подозрительно
Mikhαil
Летучую рыбу выпускайте из клетки
Vladislav
@omgszer
Ayrat
шо
Vladislav
type EventStream<'T>() = let subscribers = MVar<ResizeArray<'T -> unit>>(ResizeArray()) member __.Pub(value: 'T): unit = MVar.read subscribers |> Job.map (fun subs -> subs |> Seq.map (fun fn -> fn value |> Job.result) ) |> Job.bind Job.conIgnore |> start member __.Sub(fn: 'T -> unit): unit = subscribers |> MVar.mutateFun (fun list -> list.Add(fn); list) |> queue говнокод?
Ayrat
ну скорее да чем нет
Ayrat
просто потому что fn value может заблочить
Ayrat
это же колбек чей-то
Ayrat
а блочить в тредах гопака вообще не очень
Ayrat
я бы тут массив ченелов сделал (или мейлбоксов)
Ayrat
ну и типа на Pub закидывал в эти ченелы (мейлбоксы) сообщения
Ayrat
на другой стороне соответственно должна работать джоба по выгребанию ченела/мейлбокса
Vladislav
типо в Sub надо джобы класть?
Ayrat
в саб надо ченелы класть
Ayrat
типа вот тебе мой ченел, сообщай по нему о новых событиях, спасибо, я пошёл
Vladislav
а
Ayrat
в ченелах есть модуль now
Vladislav
вообще пока кажется проще чем на первый взгляд
Ayrat
Ch.Now.Send
Ayrat
он не создаёт джобу на отправке
Ayrat
ОПТИМИЗАЦИЯ
Ayrat
сразу в шедулер ебашит
Ayrat
для мейлбокса кстати такая же тема есть
Ayrat
и для IVar
Ayrat
для Mvar не помню
Ayrat
модуль Now это типа для тех кто NEED FOR SPEED
Ayrat
в разных примитивах он есть
Ayrat
А может я гоню и для ченела он блочит
Ayrat
надо вспомнить
Ayrat
или не надо и пойти спать (хорошая идея)
Mikhαil
Я итак читаю вас и вы совсем упоротые - такую хуйню ночью обсуждать
Mikhαil
Совсем уж на своём погромировании кукухой поехали
Mikhαil
Лучше б на дваче сидели
Mikhαil
Hog
На даче!
Hog
https://m.youtube.com/watch?v=1BgGOeKC-vs&feature=youtu.be
Vladislav
Ch.Now.Send
type EventStream<'T>() = let subscribers = MVar(ResizeArray<Ch<'T>>()) member __.Pub(value: 'T): unit = job { let! subs = MVar.read subscribers subs |> Seq.iter (fun sub -> Ch.Now.send sub value) } |> start member __.Sub(fn: Ch<'T>): unit = subscribers |> MVar.mutateFun (fun list -> list.Add(fn); list) |> start type Listner<'T>(fn: 'T -> unit) as this = inherit Ch<'T>() do Ch.take this |> Job.map (fun v -> fn v) |> Job.foreverServer |> start типо такого?
Nikolay
Стрёмно тащить гопак в прод с такими багами
Nikolay
Хз где и когда выстретрелит, и как это ловить и фиксить
Ayrat
https://twitter.com/mvsmal/status/1265310614345388032?s=19 @atsapura это ваше?
Vasiliy
Народ. мне в сервисе надо генерировать рассылку писем. Писем в целом не много, штук 10 разных типов. У этих писем есть повторяющиеся части. Есть какой-нибудь best practice? Как вижу, есть 3 пути 1) через stringBuilder собирать в коде html. Но это фигово, имхо. 2) через БД. В Бд хранить нужные теплейты. Но потом их все равно придется модифицировать как я понимаю. 3) черезе Razor. Но тут облом, в том, что если что то где то сломается надо будет обновлять приложение.