@kotlin_lang

Страница 718 из 982
Bulat
22.06.2018
12:38:05
Но именование дженериков буквой - это что-то из общего стандарта по стилю кода
Ну тут немного спорно по-моему. Обычно буква значит Value. В данном случае же View. Поэтому как мне кажется тут лучше полностью написть

Konstantine
22.06.2018
12:41:33
На вкус и цвет. О чем спор вообще.

dimiii
22.06.2018
12:45:20
На вкус и цвет. О чем спор вообще.
Об инстанцировании конкретными типами

Alex
22.06.2018
12:45:59
Google
Konstantine
22.06.2018
12:47:14
Об инстанцировании конкретными типами
Это риторический вопрос, мол не нужно спорить о стайл гайдах, особенно таких

Igor
22.06.2018
12:52:41
Пасаны, а такое вообще законно? - Сделать в Kotlin интерфейс с suspend функцией - Отнаследовать его в Java

Alexander
22.06.2018
12:54:13
Законно, но работать не будет без койла и какой-то матери

В Java он будет требовать первым аргументом Continuation. Можно его конечно руками создать, но...

dimiii
22.06.2018
12:54:43
Пасаны, а такое вообще законно? - Сделать в Kotlin интерфейс с suspend функцией - Отнаследовать его в Java
По-моему, в каком-то видео Елизаров говорил, что можно, просто нужно будет аккуратно работать с коллбеками и машинерией

Roman
22.06.2018
13:48:17
Пасаны, а такое вообще законно? - Сделать в Kotlin интерфейс с suspend функцией - Отнаследовать его в Java
Законно. Читайте спеку и всё будет хорошо https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md#continuation-passing-style

Sergey
22.06.2018
14:11:57
как-то можно узнать сколько запущено корутин? хочется вывести это в метрики и следить за тем чтобы они не утекали никуда. в го эти данные доступны

Руслан
22.06.2018
14:17:25
Посмотреть сколько классов которые : Continuation?

Sergey
22.06.2018
14:21:45
? надо попробовать

Kirill
22.06.2018
14:27:26
этого будет не достаточно

Руслан
22.06.2018
14:29:34
Конечно, нужно инструментировать каждую корутину, чтобы в начале она говорила что работает, а потом что нет? Или дампить треды и проверять есть ли в них resume? Что конкретно хочется посчитать

Google
Тимур
22.06.2018
14:33:49
как это дампить треды? спящие корутины же не привязаны к тредам, их там может хоть миллион спать в куче

Тимур
22.06.2018
14:36:30
ну как я понимаю, это не особо интересно сейчас их может работать столько, сколько потоков в пуле, не больше интересны утечки, что мы их там плодим, спать укладываем и они бесконечно копятся

Тимур
22.06.2018
14:38:34
но в этом задача не сильно отличается от утечки обычных объектов дампать аллоцированные объекты и смотреть что именно там утекло

Руслан
22.06.2018
14:41:47
в kotlinx.coroutines есть еще COROUTINE_ID. Который в дебаге виден

Обычный счетчик

dimiii
22.06.2018
14:43:15
А накидайте пожалуйста минимальный рабочий пример такой утечки, если не сложно.

Руслан
22.06.2018
14:51:54
А накидайте пожалуйста минимальный рабочий пример такой утечки, если не сложно.
считается?: val `очень нужные джобы` = mutableListOf<Job>() while (true) { `очень нужные джобы`.add(launch { Unit }) }

Руслан
22.06.2018
14:54:12


Sergey
22.06.2018
14:54:18
еще б идея блокирующие операции помечала иконкой как для suspend ?

Руслан
22.06.2018
14:55:31
А где утечка?
Просто в джаве "утечка" это слегка странно слово) да можно там про баги какие-то в gc вспонить, или про неочевидности inner классов.

Sergey
22.06.2018
14:59:45
как вы кстати боритесь с блокирующими операциями? все что не уверены заворачиваете в withContext?

Руслан
22.06.2018
14:59:48
Можно еще этот тред почитать https://github.com/Kotlin/kotlinx.coroutines/issues/326

как вы кстати боритесь с блокирующими операциями? все что не уверены заворачиваете в withContext?
да. создал свой пул: val elasticContext = Executors.newCachedThreadPool(threadFactory).asCoroutineDispatcher() и функцию чтобы удобнее было (не писать какждый раз withContext: suspend fun <T> elastic( start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend () -> T ): T = withContext(elasticContext, start, block)

И вот в таком стиле пишу методы: override suspend fun getByEmail(email: String): ToolsUserDto? = elastic { // ... }

Google
Sergey
22.06.2018
15:03:09
хм, спс

а как ловить тех которые просочились в мейн треды и начали там блочить все?

Alexander
22.06.2018
15:04:01
Это как?

Sergey
22.06.2018
15:04:29
провтыкали где-то вызов jdbc и он в коммон пуле выполнился

и ушел в себя на 10 секунд, к примеру

Руслан
22.06.2018
15:04:58
В квазаре есть такая тема что он пишет что какая-то долгая операция блочила тред

Sergey
22.06.2018
15:05:20
актуально при миграции текущей системы на netty с корутинами

Alexander
22.06.2018
15:06:31
Ну я бы просто вставил функцию на проверку треда. То есть делаем if(Thread.currentThread из корутин тред){ убить всех }

JavaFX так делает если вызов не на UI треде

Руслан
22.06.2018
15:15:15
а как ловить тех которые просочились в мейн треды и начали там блочить все?
Ну если вебчик - можно же мониторить на уровне отдельного вызова и будет счастье)

А вообще опять же инструментация поможет.

Vladimir
22.06.2018
15:17:56
провтыкали где-то вызов jdbc и он в коммон пуле выполнился
Вижу два варианта: 1. Обернуть пул в нечто, что будет следить за временем выполнения каждого вызова и ругаться, если оно превышает заданное (так делается в Vert.x) 2. Обернуть соединение JDBC в нечто, что будет ругаться, будучи вызванным в главном потоке (так с некоторыми операциями делает Android)

Sergey
22.06.2018
15:18:55
ага, всем спасибо, буду смотреть варианты

Dmitriy
23.06.2018
03:14:29
всем привет, подскажите, как на котлине сделать то, что в джаве выглядит так logger.debug(() -> "some message"); если записать просто logger.debug({ "some message" }), то он пытается вызвать функцию не с той сигнатурой вместо void debug(Supplier<?> msgSupplier); он пытается вызвать void debug(MessageSupplier msgSupplier), в итоге компиляция не проходит

Павел
23.06.2018
05:02:47
А так же logger.debug{->"message"}

А лучше использовать что-то типа mu logging

Dmitriy
23.06.2018
07:52:45
Попробуй logger.debug(Supplier{ "message" })
я забыл написать, получилось через logger.debug(Supplier { "some message" })

спасибо )

Google
Алексей
23.06.2018
08:20:51
Хорошо:)

Quantum Harmonizer
23.06.2018
10:05:35


Mikhail
23.06.2018
11:54:36
Еще немного и войдешь во вкус)

1337
23.06.2018
11:59:03
попробуй еще сгенерировать геттеры и сеттеры в идее:)

там себя совсем крутым чувствуешь, сотни кода за секунды

Yehor
23.06.2018
12:58:06
кто знает как получить абсолютный путь к файлу скрипта kts какой выполняется?

Yehor
23.06.2018
13:11:47
Paths.get(".").toAbsolutePath()?
это моя текущая директория откуда я запустил скрипт. $ ls -R > /home/scripts/foo.kts $ pwd > /home $ kotlinc scripts/foo.kts > /home а я хочу получить $ pwd > /home $ kotlinc scripts/foo.kts > /home/scripts/foo.kts

Руслан
23.06.2018
13:25:23
Ага, я понял. 1. Для чего это нужно? может сможем предложить workaround красивый 2. Как вариант написать свою обертку на bash которая будет прокидывать "$0" в скрипт

Yehor
23.06.2018
13:29:35
хотел читать данные с папки скрипта "красиво" но даже println(this.javaClass.protectionDomain.codeSource.location.path) в kts не работает

Руслан
23.06.2018
13:30:56
Ну это хороший запрос на улучшение, можно в youtrack создать issue

ну либо kotlinc path/script.kts path, но такое, да. В bash можно получить имя файла и путь из env

Quantum Harmonizer
23.06.2018
20:57:08
Есть какой-нибудь способ заставить ProGuard вырезать internal? Ну или кипнуть только те методы, которые выставлены через интерфейс.

Quantum Harmonizer
23.06.2018
21:13:44
а как это "выставлены через интерфейс"?
оверрайдят интерфейсный метод

Антон
23.06.2018
21:14:53
Типо клиентский код работает с интерфейсом

Dibro
23.06.2018
21:16:00
а через интернал -- реализация?

Quantum Harmonizer
23.06.2018
21:16:28
да, очень много internal

и хрен сузишь видимость, чтоб прогард понял

Dibro
23.06.2018
21:17:27
и хрен сузишь видимость, чтоб прогард понял
по-моему лучше просто вынести все апи в отдельный модуль

Google
Quantum Harmonizer
23.06.2018
21:17:46
это как?

Dibro
23.06.2018
21:18:49
это как?
все паблик интерфейсы в одном модуле, а реализации -- в другом

и первый как зависимость

Quantum Harmonizer
23.06.2018
21:19:10
и как прогардить?

Dibro
23.06.2018
21:19:34
я это вместо прогарда предлагаю

Quantum Harmonizer
23.06.2018
21:20:19
Вообще не понял, зачем.

Dibro
23.06.2018
21:21:08
Вообще не понял, зачем.
надо создать артефакт с апи, я правильно понял?

Quantum Harmonizer
23.06.2018
21:21:27
надо создать артефакт с апи, я правильно понял?
Надо уменьшить количество методов и объём байт-кода.

Dibro
23.06.2018
21:22:07
Quantum Harmonizer
23.06.2018
21:22:23
прогард сам все ненужное шринкует
Нет, потому что internal == public.

Dibro
23.06.2018
21:22:32
дошло))

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