Size: a a a

Kotlin Community

2020 July 16

AN

Alexander Nozik in Kotlin Community
Yaroslav
понял свою проблему с неуловимым исключением - This operator (retry) is transparent to exceptions that occur in downstream flow and does not catch exceptions that are thrown to cancel the flow.
Ну как я понял, там надо делать оператор catch
источник

Y

Yaroslav in Kotlin Community
catch так же работает, только на downstream flow
в итоге вместо моего

repositoryInst
   .getSomeDataFlow()
   .retryWhen {e -> true}

надо обернуться в парент флоу для прослушивания

flow<T> {
   repositoryInst.getSomeDataFlow()
}.retryWhen {e -> true}}
источник

Y

Yaroslav in Kotlin Community
для catch так же
flow<T> {
   repositoryInst.getSomeDataFlow()
}.catch {e -> true}}
источник

AN

Alexander Nozik in Kotlin Community
можно как-то сделать suppress на DSLMarker?
источник

M

Malik in Kotlin Community
Почему на малом объеме данных списки работают быстрее последовательностей?
В моем примере последовательности начинают обгонять по скорости начиная с ~250_000, а при меньшем значении уступают спискам.
источник

M

Mi in Kotlin Community
Malik
Почему на малом объеме данных списки работают быстрее последовательностей?
В моем примере последовательности начинают обгонять по скорости начиная с ~250_000, а при меньшем значении уступают спискам.
возможно магия JVM?
источник

QH

Quantum Harmonizer in Kotlin Community
Malik
Почему на малом объеме данных списки работают быстрее последовательностей?
В моем примере последовательности начинают обгонять по скорости начиная с ~250_000, а при меньшем значении уступают спискам.
Мало памяти выделяется, меньше копирования от ресайза листа, невиртуальные вызовы
источник

AL

Alexander Levin in Kotlin Community
Malik
Почему на малом объеме данных списки работают быстрее последовательностей?
В моем примере последовательности начинают обгонять по скорости начиная с ~250_000, а при меньшем значении уступают спискам.
1. Потому что бенчмарки это тяжело (так наверное не очень хорошо проверять). Есть предположение, что в вашем случае могут результаты сильно поменяться если вы просто переставите ваши блоки местами.
2. Со листами интересно, ибо вещи вроде создание дополнительных объектов и хранение лямбд не особо существуют в мире листов. В какой-то момент эти факторы становятся менее значимыми, чем то, что мы постоянно пересоздаём лист.
источник

QH

Quantum Harmonizer in Kotlin Community
Кстати да, здесь бенчмаркинг без прогрева
источник

M

Malik in Kotlin Community
Quantum Harmonizer
Кстати да, здесь бенчмаркинг без прогрева
О каком прогреве идет речь?
источник

QH

Quantum Harmonizer in Kotlin Community
Malik
О каком прогреве идет речь?
О прогреве JVM, в результате которого код скомпилируется в более эффективный машинный код
источник

M

Malik in Kotlin Community
Кажется, понял. Запустил такие же операции над списками и последовательностями прямо перед измерением и результаты поменялись: последовательности быстрее
источник

IO

Iaroslav Orlov in Kotlin Community
Malik
Кажется, понял. Запустил такие же операции над списками и последовательностями прямо перед измерением и результаты поменялись: последовательности быстрее
без форков и прогрева вы не получите ни намека на реальный результат
источник

АЕ

Алексей Ершов... in Kotlin Community
Привет, котлинисты! Никак не могу докрутить у себя в голове generic-и.
Задача: есть сериализатор.
interface MessageSerializer<in T> where T : Message {
   fun serialize(message: T): String
}

Message - это sealed класс
Хочу сделать для сериализаторов фабрику, которая их по заданному Message будет производить:
fun getSerializer(message: Message): MessageSerializer
Как в этом методе правильно расставить дженерики?

чтобы снаружи можно было сделать factory.getSerizliaer(message).serialize(message)

Логичная версия:
fun <T : Message> getSerializer(message: T): MessageSerializer<T>

Но тогда компилятор ругается при реализации этого метода
источник

АЕ

Алексей Ершов... in Kotlin Community
Переслано от Алексей Ершов...
источник

AL

Anton Lakotka in Kotlin Community
немного странный код. а классы эти MessageSerializer<T> реализуют? или нет
лучше конечно пример кода на https://play.kotlinlang.org/ скинуть
источник

АЕ

Алексей Ершов... in Kotlin Community
окей, сделаю более полный пример и запощу. Задача простая: есть сообщения, для каждого их вида есть свой сериализатор и парсер. Хочу это всё увязать как-то.
источник

АЕ

Алексей Ершов... in Kotlin Community
преобразование идёт из обычной строки в объектный тип и обратно
источник

QH

Quantum Harmonizer in Kotlin Community
Там проблема в том, что тип Т не уточняется, в отличие от типа месседжа. И в варианте getSerializer<Message>(msg) или getSerializer(maybeAuthMsg ?: regMsg) компилятор не зря перестраховывается.
источник

I

Igor in Kotlin Community
Похоже что нужен unchecked cast, компилятор не видит связи между when и типами
источник