@kotlin_lang

Страница 940 из 982
Mikhail
10.10.2018
07:12:11
Ну выиграешь ты 1нс на каждый вызов хэшкода

И что дальше?

Алексей
10.10.2018
07:13:14
а дальше вопрос, сколько таких вызовов

я лишь предложил вариант улучшения, вопрос только в том, насколько это нужно и насколько это - улучшение

Google
Алексей
10.10.2018
07:13:48
и вот тут я не знаю ответов:)

Alexander
10.10.2018
07:14:13
Хэш-код имеет смысле кэшировать, но только для заведомо иммутабельных классов, которые часто используют в качестве ключей к хэш-картах. Для строк так и делается. Если вы не планируете использовать объект в качестве ключа, это не очень обоснованно

Vladimir
10.10.2018
07:14:49
я лишь предложил вариант улучшения, вопрос только в том, насколько это нужно и насколько это - улучшение
Мне кажется, в качестве опциональной возможности вполне удобно. Иногда это реально может понадобиться. Вот только у дата-классов пока нет крутилок для настройки.

Alexander
10.10.2018
07:15:22
А зачем такие сложности? Просто переопределяешь его для тех классов, которые будут ключами. Их не может быть много

Konstantin
10.10.2018
07:16:52
Зачем вам контролировать порядок выполнения асинхронных операций? Это обычно очень плохая практика
В конкретном случае важно получить результат в той же последовательности, что и были вызваны методы

Vladimir
10.10.2018
07:18:00
В конкретном случае важно получить результат в той же последовательности, что и были вызваны методы
А зачем вообще вызывать отдельные корутины, если они sequential by default? Просто сделать функцию suspend и всё.

Алексей
10.10.2018
07:18:08
А зачем такие сложности? Просто переопределяешь его для тех классов, которые будут ключами. Их не может быть много
А ещё можно геттеры, сеттеры, equals генерить через shift+insert -> getters and setters | equals and hashCode :)

А ещё можно геттеры, сеттеры, equals генерить через shift+insert -> getters and setters | equals and hashCode :)
цель та же - меньше одинаковой писанины, которую нужно тестировать

Beholder
10.10.2018
07:19:11
фича спорная, сомнительно что такой кэширующий hashcode нужен всем. а кому нужен - писать руками

Konstantin
10.10.2018
07:19:24
Mikhail
10.10.2018
07:19:32
а дальше вопрос, сколько таких вызовов
Отвечу вопросом на вопрос: а JIT с этим не справится сам?

Google
Konstantin
10.10.2018
07:19:51
Алексей
10.10.2018
07:20:23
Отвечу вопросом на вопрос: а JIT с этим не справится сам?
Я сомневаюсь, что он проводит такие оптимизации

Egor
10.10.2018
07:20:42
Ну да, именно
А зачем так делать? Или что-то вынуждает?

Алексей
10.10.2018
07:21:18
А ты проверял?
нет, не успел пока

Mikhail
10.10.2018
07:22:32
ща проверю

Алексей
10.10.2018
07:22:42
ща проверю
о, спасибо

dimiii
10.10.2018
07:22:47
>кэширующий... кто-то решил бросить вызов основной проблеме программирования?

Mikhail
10.10.2018
07:23:31
или мемоизующий

Beholder
10.10.2018
07:24:57
как вообще все примотались к этим дата обжектам, все волшебства от них хотят...

dimiii
10.10.2018
07:25:01
anyway, только сейчас сочинил золотое правило - такие вещи хороши только тогда и только в таком исполнении, когда легко подключаются и отключаются

Konstantin
10.10.2018
07:25:04
А зачем так делать? Или что-то вынуждает?
В общем момент какой — вызывается мой метод, в котором я как-то обрабатываю данные (хочу как раз прикрутить корутины туда) и после хочу вызвать указанный колбэк. Метод вызываю не я сам, потом контролировать это не могу. Но при этом последовательность вызовов колбэка нужно сохранить

Quantum Harmonizer
10.10.2018
07:25:18
Quantum Harmonizer
10.10.2018
07:25:56
цель та же - меньше одинаковой писанины, которую нужно тестировать
...и сложнее компилятор, который нужно тестировать. Я вот понимаю идею и мотивацию, но блин, кому нужен этот хэш-код?

серьёзно?
там исходники довольно понятные

Алексей
10.10.2018
07:26:58
Vladimir
10.10.2018
07:27:02
хэш-коды строк «вычисляются» за О(1) только потому что кэшируются ;)
Ну я "повторное" вычисление и имею в виду, речь же про кэширование.

Google
Quantum Harmonizer
10.10.2018
07:27:46
В одной из компаний использовали объекты interface Key как ключи к данным в IOC
Что это за класс, какие такие данные? А, какая разница, это же единичный случай.

Алексей
10.10.2018
07:29:19
Что это за класс, какие такие данные? А, какая разница, это же единичный случай.
поправил, это был интерфейс, но не важно - реализации ключей были разные (от данных из бд (то есть реализация select)) до обычных строк внутри

так что тут бы очень пригодилось

ну и в проектах данные кроме как от IOC по этим ключам получить никак нельзя было

не спорю, что это отдельный случай упоротости, но факт

Quantum Harmonizer
10.10.2018
07:46:27
поправил, это был интерфейс, но не важно - реализации ключей были разные (от данных из бд (то есть реализация select)) до обычных строк внутри
Я тут вообще пишу штуку, которая без рефлексии и кодогенерации позволяет объявлять структуры, которые можно хоть из БД вычитать, хоть из JSON или любого другого формата. hashCode, equals и toString() у них тоже есть. https://t.me/kotlin_lang/93838

Mikhail
10.10.2018
08:06:40
нет, не успел пока
https://gist.github.com/Mishkun/d5ef92c108ab086a1ed3253e6b16124c

Igor
10.10.2018
08:09:11
https://gist.github.com/Mishkun/d5ef92c108ab086a1ed3253e6b16124c
А можно заменить на одно поле и сравнивать с 0 (как в String)

Mikhail
10.10.2018
08:09:23
в общем, какую-то горсть наносекунд выиграть можно

но стоит ли еще одно поле в каждом дата классе того?

Алексей
10.10.2018
08:12:02
получается, выигрышь в полтора раза?

грубо говоря

да, получается, от задачи сильно зависит, очень сильно

А что за аннотация @Benchmark?

Mikhail
10.10.2018
08:14:11
Алексей
10.10.2018
08:14:32
не забывай про ошибку
А там число среднее или score ?

Google
Igor
10.10.2018
08:14:53
в общем, какую-то горсть наносекунд выиграть можно
А он точно от одного и того же значения кеш считает?

Quantum Harmonizer
10.10.2018
08:14:57
ок
кстати да, первое, что попросят JB к перформансным задачам — бенчмарки

Igor
10.10.2018
08:16:00
Как то странное, что с “кешированием” получается в 1.5 медленне ?

Алексей
10.10.2018
08:17:01
там не скорость а score (количество операций в секунду, как я понял)

Igor
10.10.2018
08:17:23
Подожи ”jmh.KotlinLazy.eagerHash": 4644407.477 ops/s "jmh.KotlinLazy.lazyHash" : 2535249.580 ops/s

Admin
ERROR: S client not available

Mikhail
10.10.2018
08:17:41
(доверительный интервал)

Алексей
10.10.2018
08:18:06
это ошибка
Я, кстати, не понял, что имеется ввиду

Mikhail
10.10.2018
08:18:16
Алексей
10.10.2018
08:18:35
но получается, что у кеша погрешность меньше

Igor
10.10.2018
08:18:40
А, понятно ?

Алексей
10.10.2018
08:18:48
или имеется ввиду погрешность в числе операций в секунду?

Mikhail
10.10.2018
08:18:53
Да там она все равно на порядки меньше значения

Алексей
10.10.2018
08:19:08
ясненько

Google
Алексей
10.10.2018
08:21:13
@themishkun как можно с вами (тобой) связаться кроме телеги? я в личку писать не могу -.-

Алексей
10.10.2018
08:23:19
а почему в лс не можешь?
не знаю, когда пишу - говорит, что нельзя писать неконтактам

-.-

Mikhail
10.10.2018
08:23:24
https://gist.github.com/Mishkun/d5ef92c108ab086a1ed3253e6b16124c
а можно не в операциях в секунду, а в наносекундах на операцию?

Mikhail
10.10.2018
08:29:40
Как вариант.
Т.е. делаешь универсальную спеку? Есть одна идейка, но она немного сложная, вечерком распишу

Quantum Harmonizer
10.10.2018
08:30:16
Т.е. делаешь универсальную спеку? Есть одна идейка, но она немного сложная, вечерком распишу
Да, вплоть до того, чтобы доступные конвертеры подгружались посредством SPI или ещё какой-то срани.

Mikhail
10.10.2018
08:53:10
пасиба

Sviat
10.10.2018
09:08:19
Всем привет, не могу подружить котлин, джексон и прогвард. Прописываю -keep kotlin.Metadata но дата классы все равно не хотят сериализоваться. Подскажите если у кого-то если кто-то сталкивался)

Alexandr
10.10.2018
09:09:36
а какая ошибка то?

jackson-kotlin подрублен?

Sviat
10.10.2018
09:15:54
jackson-kotlin подрублен?
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of app.example.c.b.h (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

подрублен

джексон лежит в вдиже файлика в ассетах, следующей структуры { "items": [ {}, {} ] }

Alexandr
10.10.2018
09:16:50
подрублен
модуль зарегистрирован?

Страница 940 из 982