Ayrat
корутины разрешили с барского плеча писать нормально
suspend fun foo() {
val x = flatMap(…)
val y = x.flatMap (…)
val z = y.flatMap ( …)
…
}
Ilya
Ilya
Но он тут неприменим, кажется.
Igor
по-любому который не корутина
Все таки я не понимаю зачем, если у тебя стрим-по стриму-по стриму, у тебя др проблемы)
монады вообще штука спорная, императивная да и вообще перпендикулярна фп
Anonymous
А ещё джава к 2024 будет уметь всё, что умеет котлин. Будет интересно посмотреть.
Ayrat
Igor
Ayrat
я говорю что это просто любая монада
Ayrat
Igor
я говорю, что тебе не нужна "любая" монада, это не хаскель (ну скала)
Igor
Ну попробуй arrow)
Ayrat
вот моя монада сразу собирает трейсинг со всех колов
Ayrat
то есть ты пишешь флатМапы, а там на фоне вся эта монадная хуина мержит, зипит и агрегирует
Anonymous
А мог бы просто на питоне писать
Roman
@omgszer я слышал, там можно писать какие-то экстеншны к компилятору, причем, их по идее должно ИДЕ сразу подхватывать
Roman
но я даже на мамкиного котлиниста не тяну
Anonymous
Ну если ты хочешь расширять язык то может сразу пойти туда, где есть макросы?
Roman
можно сразу пойти, да
Ayrat
проект без изменений, уточню
Anonymous
Roman
Anonymous
Igor
А в кложур макросы норм
Ну там же стат. типизации нет для композитных типов, скалисты когда это видят сразу рвутся на месте)
Ayrat
Ayrat
это как коты в скале
Anonymous
Igor
Igor
По этому плагины сейчас пишут только сами jb и google (для compose) тк имеют прямые контакты с котлин командой
Ну и 47deg конечно, но они вообще стремные ребята, одно время форкнули компилятор что бы тайпклассы завести
Anonymous
Ну в мажорных релизах ломается, но он на то и мажорный
Igor
Ну и плюс, jb сейчас компилятор переписывают.
При этом допустим в kotlin-native уже новый компилятор, а в jvm по умолчанию старый
Anonymous
О, может паттерн матчинг случайно сделают
Denis
Igor
Бреслав же сказал что не нужно.
Хочешь пм - бери java 🌚
Anatoly
Ноут отрапортовал, что вентилятору на видеокарте хана. Может быть из-за этого у меня в играх всего 30 фпс? :)
Крылатый
Да.
Vasily
@omgszer , можешь на один код глянуть?
Vasily
Очень подозрительно выглядит
Ayrat
Через часок смогу
Vasily
https://github.com/fsprojects/Fabulous/pull/771#issuecomment-652258550
Vasily
Очень подозрительный "хак" для дропа очереди сообщений
Ayrat
Ayrat
мейлбокс же конкурентный, пока ты его читаешь, тебе пихуют
Ayrat
поэтому вот это
let queueLength = inbox.CurrentQueueLength
будет валидно только и исключительно в ЭТОТ момент времени
Ayrat
и вот этот цикл
for i = 1 to queueLength - 1 do
Ayrat
будет уже работать с мейлбоксом такой же или большей длины
Ayrat
я чот нихуя не понял
Ayrat
чо вы вообще там делаете
Vasily
Есть поток апдейтов
Vasily
Меняющих стейт модели
Vasily
Сейчас на каждый апдейт вызывается рендер
Vasily
Хочется от этого уйти
Vasily
И условно во время рендера аккумулировать стейт для следующей отрисовки
Ayrat
ок, а зачем дропать весь текущий мейлбокс?
Ayrat
причем он не дропнет весь мейлбокс
Vasily
Ну у Тима такая наивная теория, что оно сработает
Vasily
По факту нам нужен самый свежий стейт
Vasily
Мож,отпишешь там грамотно?
Ayrat
где хранится стейт? в месаджах мейлбокса?
Vasily
Стейт в лупе
Vasily
Идея следующая
Vasily
Есть поток апдейтов
Ayrat
ну то есть нам надо не дропать меседжи, а нихуя не делать пока isRendering = true?
Ayrat
зачем эти костыли с дропом?
Hog
Зачем аккумулировать стейт?
Vasily
Hog
Какая разница кнопка была синей полсеку
Hog
Вот
Ayrat
я вот вижу так
match inbox.receive with
| Render ->
if isRendering then
() // doNothing
else
isRendring <- true
startRender()
Hog
60 раз в сек посылать мессаж
Ayrat
ну и всё
Hog
Рендер
Hog
А по остальным тока менять стейт
Ayrat
ну и где-то там обнулять isRendering по окончанию рендеринга
Hog
Согласен