Size: a a a

Kotlin Community

2020 August 01

BV

Boris Vanin in Kotlin Community
экспозед я помню мне не понравился своей сингтоновостью, там всё так же, по прежнему?
источник

BV

Boris Vanin in Kotlin Community
смотрю экспозед и понимаю, насколько же круто было бы иметь мультирессиверы, настолько это круто вот в таких либах
источник

BV

Boris Vanin in Kotlin Community
да и со стракчеред канкаренси ресивер обычно занят
источник

AM

Andrew Mikhaylov in Kotlin Community
Да, корутинки, которые отбирают место для своего контекста — это не очень приятно :)
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Да, корутинки, которые отбирают место для своего контекста — это не очень приятно :)
Это оффициальная причина, почему jetpack на аннотациях вместо ресиверов.
источник

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
Это оффициальная причина, почему jetpack на аннотациях вместо ресиверов.
Я знаю, компайлер плагин же среди прочего протягивает первым параметром во многие вызовы свою балалайку.
источник

AM

Andrew Mikhaylov in Kotlin Community
Ну, кроме всего прочего, что он делает, конечно.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Я знаю, компайлер плагин же среди прочего протягивает первым параметром во многие вызовы свою балалайку.
Я просто в начале джетпака пинал разрабов по этому поводу. Как раз почему не ресиверы (с точки зрения языка это было бы на порядок органично). Ответ был в том, что не хотят занимать ресиверы
источник

I

Igor in Kotlin Community
Alexander Nozik
Я просто в начале джетпака пинал разрабов по этому поводу. Как раз почему не ресиверы (с точки зрения языка это было бы на порядок органично). Ответ был в том, что не хотят занимать ресиверы
А есть какие-то примеры compose функций с ресиверами?
источник

AN

Alexander Nozik in Kotlin Community
Igor
А есть какие-то примеры compose функций с ресиверами?
Нет пока. Но типа место под корутины.
источник

BV

Boris Vanin in Kotlin Community
да а смымсл-то композеров пинать, что они сделают, это надо в язык завозить
источник

BV

Boris Vanin in Kotlin Community
а в язык что-то не торопятся
источник

AN

Alexander Nozik in Kotlin Community
Мое личное мнение - ресиверы там (в компоузе) прямо напрашиваются. Мигом убирается почти вся магия с точки зрения языка.
источник

AN

Alexander Nozik in Kotlin Community
Boris Vanin
да а смымсл-то композеров пинать, что они сделают, это надо в язык завозить
Ну так-то мульти там пока не нужны. Обычных хватит
источник

BV

Boris Vanin in Kotlin Community
Alexander Nozik
Ну так-то мульти там пока не нужны. Обычных хватит
вот этого никогда не знаешь, где есть один ресивер, может понадобиться и другой
источник

BV

Boris Vanin in Kotlin Community
да что уж греха таить в любом многоуровневом дсл-е возникают ситуации, когда надо вынести функцию которая применяется в разрезе нескольких компонент, я уже столько раз на это нарывался
источник

AN

Alexander Nozik in Kotlin Community
Там есть фундаментальная задача, которую Роман Елизаров не раз поднимал: разметка специализированного кода. То есть такого кода, который может быть выполнен только в определенном окружении и не может использовать каких-то концепций извне. Это можно сделать аннотациями, или специальными ресиверами. Все равно нужна будет специальная магия, чтобы ограничить внешний код. Пример - SequenceScope, который как бы скоуп, но с ограничениями. Мне все-таки кажется, что ресиверы - это более естественная штука, чем аннотации.
источник

AN

Alexander Nozik in Kotlin Community
Alexander Nozik
Вслед уходящему 1.3 языково-либная проблема, видимо для @relizarov. Вот тут вот код: https://github.com/mipt-npm/plotly.kt/blob/4e0200d139099d5cce40fade39a8c45aa43fc340/examples/src/main/kotlin/complexDynamicServer.kt#L72-L132. Идея в том, что есть некоторый контейнер, в котором рендерится html, внутри которого рендерится график. График по-разному конвертится в html в разных окружениях (статика, динамика, jupyter). Соотвественно для того, чтобы его отрисовать, ему надо с верхнего уровня прокинуть контейнер/рендер. Мое первое решение было использовать мое любимое и  сделать кастомный FlowContenr (он интерфейс) с мембер расширением:
class PlotlyFlowContent(val parent: FlowContent): FlowContent by parent{
 fun FlowContent.plot(...)
}

И оно даже работало... пока вызов plot был на верхнем уровне. А потом нет, потому что на всех элементах HTML висит DSLMarker и он не дает прокинуть ресивер из родительского элемента. В результате то решение, которое сейчас есть. Контейнер передается явно, что не очень красиво. Есть ли мысли на этот счет?
источник

BV

Boris Vanin in Kotlin Community
да, я это читал и тоже с этой проблемой сталкивался не единыжды
источник

BV

Boris Vanin in Kotlin Community
Но это лишь значит, что это решение не очень удачное
источник