Size: a a a

Kotlin Community

2020 May 16

AN

Alexander Nozik in Kotlin Community
Вообще в случае JVM, категорически не надо делать досрочных оптимизаций.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Ну как ничуть не сложнее, экстеншн разве что в своём синглтонном WeakHashMap-е каком-нибудь кешировать данные может, это чуть менее тривиально, чем в обычном методе к приватному полю класса обратиться...
Ну кэш будет глобальный. Вопрос в том, что кэшировать.
источник

QH

Quantum Harmonizer in Kotlin Community
Alexander Nozik
Ну сделать кэш в экстеншене ничуть не сложнее, чем в нормальном методе. Вообще, конечно, если у вас чего-то вычисляется и есть кэш и состояние, значит делать это дата классом уже не вполне корректно.
ConcurrentWeakIdentityHashMap? :)
источник

IO

Iaroslav Orlov in Kotlin Community
Alexander Nozik
Вообще в случае JVM, категорически не надо делать досрочных оптимизаций.
да и не только в случае JVM
источник

IO

Iaroslav Orlov in Kotlin Community
Quantum Harmonizer
ConcurrentWeakIdentityHashMap? :)
нет же такого
источник

QH

Quantum Harmonizer in Kotlin Community
Iaroslav Orlov
нет же такого
да в том и проблема
источник

AN

Alexander Nozik in Kotlin Community
Но как я уже сказал, вопрос в том, что в дата классе вообще не должно быть кэша. Если нужен кэш, делаете нормальный класс с инкапсулированной реализацией
источник

IO

Iaroslav Orlov in Kotlin Community
Iaroslav Orlov
нет же такого
да и я не уверен, как это реализовать без оверхеда
источник

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
Ну кэш будет глобальный. Вопрос в том, что кэшировать.
Насколько я понял, речь идёт о предпосчитанном свойстве, вычисляемом на основании других свойств дата класса.
источник

IO

Iaroslav Orlov in Kotlin Community
concurrenthashmap тот же сделан вообще через unsafe)0
источник

IO

Iaroslav Orlov in Kotlin Community
в jdk
источник

AM

Andrew Mikhaylov in Kotlin Community
Andrew Mikhaylov
Насколько я понял, речь идёт о предпосчитанном свойстве, вычисляемом на основании других свойств дата класса.
Не вижу, как это делает дата класс не дата классом
источник

QH

Quantum Harmonizer in Kotlin Community
Iaroslav Orlov
concurrenthashmap тот же сделан вообще через unsafe)0
и?
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Не вижу, как это делает дата класс не дата классом
Ну хорошо, убедили. Собственно на этот случай и сделали возможность в дата класс пихать логику.
источник

IO

Iaroslav Orlov in Kotlin Community
неприятно в своей реализации лезть в unsafe ради того чуда, которое можно сделать попросту свойством в теле класса
источник

QH

Quantum Harmonizer in Kotlin Community
Iaroslav Orlov
неприятно в своей реализации лезть в unsafe ради того чуда, которое можно сделать попросту свойством в теле класса
дак под капотом всё «небезопасное», выполняется напрямую процессором и работает с сырыми указателями и без типов. И что? 🤷‍♂️
источник

I

Igor in Kotlin Community
Andrew Mikhaylov
Ну как ничуть не сложнее, экстеншн разве что в своём синглтонном WeakHashMap-е каком-нибудь кешировать данные может, это чуть менее тривиально, чем в обычном методе к приватному полю класса обратиться...
тк все кейсы использования класса не продумаешь, то и подовсе приватные поля не напилишь

мне кажется кеширование должна заниматься вызывающая сторона (и то после профайлирования)
источник

IO

Iaroslav Orlov in Kotlin Community
Quantum Harmonizer
дак под капотом всё «небезопасное», выполняется напрямую процессором и работает с сырыми указателями и без типов. И что? 🤷‍♂️
то, что того же unsafe может и не быть в зависимости от jdk, как и sun.* пакетов
источник

IO

Iaroslav Orlov in Kotlin Community
либо можно прикрыть лавочку с Unsafe.class.getStaticField("theUnsafe")
источник

QH

Quantum Harmonizer in Kotlin Community
Iaroslav Orlov
то, что того же unsafe может и не быть в зависимости от jdk, как и sun.* пакетов
Не может.
Они и так всё давно прикрыли, но класам JDK можно.
источник