Vasily
Ну и лучше, наверное, не стримами делать
Pavel
а где вы вообще InfiniteStream нашли?
ну вот мой первый пример он по сути и есть
Ayrat
Ну и лучше, наверное, не стримами делать
да не, как раз для стримов самое то, но мемоизирующие редко нашли
Pavel
просто я его уже упростил в поисках до невозможного что б все отсечь
Ayrat
ну вот мой первый пример он по сути и есть
Stream.unfoldFun (fun _ -> Some(DateTime.UtcNow,())) () |> Stream.duringEach (timeOutMillis 10) |> Stream.consume
Ayrat
я не уверен что именно у вас отжирает, у меня всё стабильно)
Ayrat
duringEach немного стабильнее интервал будет выдавать
Ayrat
потому что он независимо от апстрима этот интервал считает, а afterEach начинает новый интервал ожидания только после получения значения из апстрима
Ayrat
в тривальном случае это неважно, но всё же
Pavel
я не уверен что именно у вас отжирает, у меня всё стабильно)
дык выяснили же что 4.6.1 со стандартом выжирает память и SO
Pavel
кор кстати бодрячком
Pavel
Ayrat
дык выяснили же что 4.6.1 со стандартом выжирает память и SO
А, я думал вы уже забили фул фреймворк тестить
Pavel
с фулом понятно.
Pavel
гопак на фуле версии ниже 4.7.1 лучше не пользовать
Ayrat
Любопытно, но да.
Pavel
ну если только очень осторожно и не нагружая
Ayrat
ну если только очень осторожно и не нагружая
тогда гопак вообще лучше не использовать. Он как раз неплох когда там триллиарды асинхронных жобов летают туда-сюда
Romɑn
Romɑn
Romɑn
Bugs можно сократить, и получится классическое выражение
Romɑn
так ,можно написать бота который будет знать где флудилка, а где канал. И отмечать сообщения флуд-для переноса )
Vladislav
форневера хейтил ужасно пока он не перестал переносить левые сообщения в зеленый чат
gsomix
@fvnever Так и знай!
Анна
Как можно хейтить @fvnever, он же няшный!
Vladislav
когда он заливал 100 сообщений левых его убить хотелось
Ayrat
ну если только очень осторожно и не нагружая
3 реализации стримов 1) ChStream - стримы на ченелах 2) AltStream - стримы на альтах 3) Stream - базовые стримы гопака на картинке справа можно видеть 3 участка (плато с 0% цпу отделяют их друг от друга) идут в том же порядке ChStream и AltStream имеют константную память ChStream ещё и проц грузит AltStream не грузит проц особо, при этом ещё раза в 3 быстрее Stream базовый генерит говнотонну мусора
Ayrat
Ayrat
если что stream не течёт, это просто GC в конце решил болт забить на финальный Collect
Ayrat
Короче, именно AltStream надо вливать в базовый гопачок. тем более что он легко (в силу сабтайпинга Alt -> Promise) может стать персистентным. Буквально в одну строчку
Ayrat
@neftedollar пингую тебя, как заинтересованного!
Ayrat
меня просто заебало что они хорошие, но бля GC помирает от бесконечных промизов
Pavel
интересно.
Pavel
еще б стрелки гопачные в человечий вид причесать
Ayrat
А что с ними?) https://github.com/Hopac/Hopac/blob/master/Docs/Operators.md
Ayrat
всё логично же!!! единственная бесячая ^=> и ^->, т.к. меняют ассоциативность и я не понимаю почему.
Ayrat
т.е. я не понимаю почему так сделано
Pavel
да много их слишком
Pavel
val ( *<= ): IVar<'x> -> 'x -> Job<unit> val ( *<=! ): IVar<'x> -> exn -> Job<unit>
Pavel
вот нафига лишняя сущность *<=!
Pavel
и там много такого
Ayrat
вот нафига лишняя сущность *<=!
почему лишняя? я пользовался. У него много операторов которые на ! кончаются. Это все которые эксепшун бросают
Ayrat
>>-!
Pavel
не то что этот вариант не нужен, просто можно было б завернуть все в *<= а уж 'x там или exn компилятор сам разберется
Ayrat
а вот нет
Ayrat
это не то же самое
Vladislav
>>-!
🔪🔪🔪🔪🔪
Ayrat
*<= new Exception("123") это просто засунет в IVar объект экспешн *<=! new Exception("123") такая запись сделает из IVar источник ошибки "123" на чтении из IVar
Ayrat
т.е. тот кто попытается прочитать такой IVar будет падать с ошибкой
Ayrat
согласись, есть разница
Pavel
Pavel
согласись, есть разница
ок. а тут ? val ( *<- ): Ch<'x> -> 'x -> Alt<unit> val ( *<= ): IVar<'x> -> 'x -> Job<unit> val ( *<<= ): MVar<'x> -> 'x -> Job<unit>
Ayrat
ок. а тут ? val ( *<- ): Ch<'x> -> 'x -> Alt<unit> val ( *<= ): IVar<'x> -> 'x -> Job<unit> val ( *<<= ): MVar<'x> -> 'x -> Job<unit>
Так из сигнатуры видно что это заполнение разных объектов неким значением. Есть предложения как упростить?
Pavel
Так из сигнатуры видно что это заполнение разных объектов неким значением. Есть предложения как упростить?
в strp завернуть. зато операторов гораздо меньше будет. и смена IVar на MVar к примеру будет безболезнена
Éminence grise
Кстати, вот тут https://github.com/Hopac/Hopac/blob/master/Docs/Internals.md в разделе Tail calls and Trampolining про хвостовую рекурсию в C# F# и JIT пишет сам автор Hopac. Очень познавательно.
Ayrat
в strp завернуть. зато операторов гораздо меньше будет. и смена IVar на MVar к примеру будет безболезнена
Они разной семантикой обладают, поэтому там аутпут разный IVar - одноразовое заполнение, дальнейшее приведёт к ошибке, поэтому Job Ch - многоразовое заполнение/выемка, поэтому Alt чтобы можно было без сайдэффектов писать/читать в много потоков MVar - как Ch, но mutable, поэтому заполнение выдаёт Job (а не Alt)
Ayrat
SRTP тут не поможет особо
Pavel
SRTP тут не поможет особо
type ArrowHelper1<'x>() = static member ($) (a : Ch<'x>, b : 'x ) : Alt<unit> = ( *<- ) a b static member ($) (a : IVar<'x>, b : 'x ) : Job<unit> = ( *<= ) a b static member ($) (a : MVar<'x>, b : 'x ) : Job<unit> = ( *<<= ) a b let inline ( *<-- ) a b = a $ b
Ayrat
ааа
Ayrat
Читер)
Pavel
а то
Hog
Всем превед!
Hog
А как на ифоне отрубить бэкграунд обновление телеграмма? :) А то убивается батарейка за ночь по понятной причине :))))
Hog
т.е. даже оставление на зарядке не спасает - вы быстрее генерите сообщения :))))
Pavel
прям передовая техника.
Hog
я уже всё что можно телеграму отрубил - не спасает
Pavel
ну выключи вайфай или что там :)
Hog
точно :) надо самолётик на ночь включать :)
Hog
а чо во флудилке :) это прям отл для основного!
Hog
https://compositional-it.com/blog/2018/11-20-safe-one-year-on/index.html