Size: a a a

Kotlin Community

2020 May 22

VP

Vladimir Petrakovich in Kotlin Community
Так он утрированный или ровно такой, как у вас?
источник

ДК

Дима Красилов... in Kotlin Community
Vladimir Petrakovich
Так он утрированный или ровно такой, как у вас?
У меня другой, но суть та же самая.
Лан, сек
источник

ДК

Дима Красилов... in Kotlin Community
https://gist.github.com/dkrasilov/c0cd7520ec274f0c4f1c2e5236cd9714

ну собственно вопрос у меня - чем обусловлено такое поведение
источник

ДК

Дима Красилов... in Kotlin Community
Я не понимаю ничего в корутинах.
Типа прежде, чем запустить корутину, создается какой-то снапшот контекста и кладется в условный стек или шо.
источник

ДК

Дима Красилов... in Kotlin Community
М... Я понял, походу.
Котлин полагает, что херня, которую я заинжектил, иммутабельная (а это прокся спринга) и он не создает ее копию, так что ли?
источник

VP

Vladimir Petrakovich in Kotlin Community
Дима Красилов
https://gist.github.com/dkrasilov/c0cd7520ec274f0c4f1c2e5236cd9714

ну собственно вопрос у меня - чем обусловлено такое поведение
Хм, а инжектить запрос в конструктор контроллера считается хорошей практикой?
Вообще мне кажется, что если заменить GlobalScope.launch { } на ForkJoinPool.commonPool().execute { }, ничего не изменится
источник

ДК

Дима Красилов... in Kotlin Community
Vladimir Petrakovich
Хм, а инжектить запрос в конструктор контроллера считается хорошей практикой?
Вообще мне кажется, что если заменить GlobalScope.launch { } на ForkJoinPool.commonPool().execute { }, ничего не изменится
В реальном коде у меня чуть другой кес, но суть та же самая.
Я понимаю, что это плохая практика и лучше так не делать, мне просто интересно, почему так случилось.
источник

VP

Vladimir Petrakovich in Kotlin Community
Дима Красилов
М... Я понял, походу.
Котлин полагает, что херня, которую я заинжектил, иммутабельная (а это прокся спринга) и он не создает ее копию, так что ли?
Что касается проксей, то в спринговом приложении лучше подключить плагин org.jetbrains.kotlin.plugin.spring (чтобы всё было open). Но это не связано с корутинами.
источник

VP

Vladimir Petrakovich in Kotlin Community
Дима Красилов
В реальном коде у меня чуть другой кес, но суть та же самая.
Я понимаю, что это плохая практика и лучше так не делать, мне просто интересно, почему так случилось.
Ну мне кажется, что дело не в корутинах, а просто в том, что этот объект используется в фоне из другого потока. Почему так происходит, я не знаю.
источник

BP

Bogdan Panchenko in Kotlin Community
Дима Красилов
Типа "Ты здохнешь если будешь делать х"
Так  про любой код на спринге можно сказать, вне контекста корунтин
источник

BP

Bogdan Panchenko in Kotlin Community
Дима Красилов
Я тут обнаружил такой момент.
У меня есть бин, я в него инжектил в конструктор
val httpServletRequest: HttpServletRequest
И внутри void метода бина вызывал
GlobalScope.launch{ httpServletRequest.doSmth }

Получаю No thread-bound request found, что в какой-то степени логично

Если же передавать этот httpServletRequest в параметре метода, а не инжектить через конструктор, то все работает.

Это почему так?
Ну зачем использовать глобальный скоуп. Сделайте свой - для компонента
источник

BV

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

VP

Vladimir Petrakovich in Kotlin Community
Boris Vanin
что-то не могу придумать красивое решение, у меня есть сиквенс и мне из него надо выбрать фиксированное количество уникальных элементов
distinct + take, не?
источник

BV

Boris Vanin in Kotlin Community
Vladimir Petrakovich
distinct + take, не?
был уверен, что нету дистинкта у синвевнса, да спс
источник

VS

Vladimir Sitnikov in Kotlin Community
Vladimir Petrakovich
distinct + take, не?
А эта штука лениво работать будет?
источник

VP

Vladimir Petrakovich in Kotlin Community
Vladimir Sitnikov
А эта штука лениво работать будет?
У неё нет причин работать не лениво 🤷‍♂️
источник

VS

Vladimir Sitnikov in Kotlin Community
Vladimir Petrakovich
У неё нет причин работать не лениво 🤷‍♂️
Точно. Оно хранит hashset и выдаёт данные постепенно
источник

AN

Alexander Nozik in Kotlin Community
Введение такой хрени:
abstract class RealChain : Chain<Double> {
   abstract fun nextDouble(): Double
   override suspend fun next(): Double = nextDouble()
}

ускорило код в три раза. Догадайтесь почему?
источник

AN

Alexander Nozik in Kotlin Community
Из-за боксинга. Он как-то весело с корутинами взаимодействует. С корутинами эскейп-анализ не ловит ненужный боксинг
источник

AS

Aleksandr Semyanniko... in Kotlin Community
Кстати про корутины, а есть какая-нибудь дока, которая рассматртвает корутины с т.з. модели памяти?
источник