
Egor
09.10.2018
19:52:39
аааа
Точно

Quantum Harmonizer
09.10.2018
19:54:08

Beholder
09.10.2018
19:54:46
ещё есть лог сборки

Google

Quantum Harmonizer
09.10.2018
19:55:18
Ага. В YouTrack отнести? :/

Beholder
09.10.2018
19:55:24
%user%\.IntelliJIdea2018.2\system\log\build-log\build.log
на каком коде падает?
небось какая-нибудь нетривиальная конструкция

Quantum Harmonizer
09.10.2018
20:03:48

Артур
09.10.2018
21:06:26
Всем привет! Есть ли способ сделать мапу <T, suspend (K) -> V)> ?
Идея говорит, Unsupported [Callable reference to suspend function], но мне кажется это не такой редкий кейс, чтобы люди не нашли для него решения (хотя я не нашел). Может что-то подскажете? Гугл ответа не дал. Спасибо.

Quantum Harmonizer
09.10.2018
21:07:15

Артур
09.10.2018
21:07:19
Ага

Andrew
09.10.2018
21:07:40
Ну вот это работать пока и не будет, как говорит текст ошибки.

Артур
09.10.2018
21:07:46
?
Неужели придется обходиться when?

Quantum Harmonizer
09.10.2018
21:08:17

Google

Andrew
09.10.2018
21:08:19
Всё ещё можно писать myMap[key] = suspend { a, b -> realFunc(a, b) }, пока не завезли ссылки.

Артур
09.10.2018
21:09:18
Понял, спасибо ?

Beholder
09.10.2018
21:15:42
недокументированное чудо
для чего оно?

Quantum Harmonizer
09.10.2018
21:15:58

Beholder
09.10.2018
21:16:11
suspend { }
не ключевое слово, а имя функции
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/suspend.html

Igor
09.10.2018
21:21:31
для чего оно?
Что бы создавать suspend лямбда ?♀
val f: suspend () -> Int = suspend { delay(1); 42 }

Beholder
09.10.2018
21:22:38
чёрная магия какая-то
у меня в браузере десятка два закладок на статьи по корутинам, а разобраться до конца и применить я их так и не осилил ещё ☹️

Andrew
09.10.2018
21:27:27
не ключевое слово, а имя функции
Ключевое слово не добавляли, дабы не ломать обратную совместимость в минорном релизе (вдруг кто-то у себя функцию с такой же сигнатурой завёл). При этом, ЕМНИП, компилятором ограничили область применения вызову kotlin.suspend так, чтобы она максимально была похожа на модификатор. Цель проста — в будущем, когда можно будет сломать обратную совместимость, заменить её на модификатор :)

Quantum Harmonizer
09.10.2018
21:28:48
Чёрт. Почему цвет как у ключевого слова? Я поверил...

Igor
09.10.2018
21:29:57
А может и не стоит делать ключевое слово, если и так работает ?

Andrew
09.10.2018
21:36:57
Ну кстати на гитхабе я эту функцию не нагуглил. Видать, это не просто интринсик, это очень интринсик :D
А, отбой, нашёл:
https://github.com/JetBrains/kotlin/blob/9af73168455f61abb9d109317ff8170e7573eb4d/libraries/stdlib/src/kotlin/util/Suspend.kt#L14
А пояснение в https://blog.jetbrains.com/kotlin/2018/03/kotlin-1-2-30-is-out/ под "Changes in the libraries"
https://youtrack.jetbrains.com/issue/KT-22766 и вот соответствующая ишью


Quantum Harmonizer
09.10.2018
21:50:25
А что ты пишешь?
Клиент либы объявляет структуру: https://github.com/Miha-x64/reactive-properties/blob/master/logic-sample/src/main/kotlin/net/aquadc/propertiesSampleLogic/sql/schema.kt#L13
Тем временем, string, long и т. п. — это вот такие god converterы: https://github.com/Miha-x64/reactive-properties/blob/master/persistence/src/main/kotlin/net/aquadc/persistence/converter/converter.kt#L46
В месте использования мы очень надеемся, что конкремный конвертер действительно реализован: https://github.com/Miha-x64/reactive-properties/blob/master/sql/src/main/kotlin/net/aquadc/properties/sql/JdbcSession.kt#L65
Вопрос: как сделать более гибко и менее уродливо?

Beholder
09.10.2018
21:53:55
"конвертер из всего во всё" - это шиза какая-то IMHO

Google

Beholder
09.10.2018
21:54:45
сочинительство очередной "божественной" библиотеки?

Like
09.10.2018
21:55:51
шо ты тут стебешься, разбирайся с корутинами

Beholder
09.10.2018
22:07:35
да если бы... на работе на просто джаве пишем. ещё и на 6-й. котлин только дома фор фан

Quantum Harmonizer
09.10.2018
22:18:59

Beholder
09.10.2018
22:19:38

Quantum Harmonizer
09.10.2018
22:20:06

Beholder
09.10.2018
22:20:37
очередная сериализация, в общем
куча же разных сериализаторов
вон и фирменный котлиновский делают
и работа с jdbc не похожа на просто "хранение и транспорт"
так лучше просто сериализовать в блобы и кидать в базу

Quantum Harmonizer
09.10.2018
22:24:21

Quantum Harmonizer
09.10.2018
22:24:27

Beholder
09.10.2018
22:26:18
я плохо вижу что общего, например, между записью в jdbc и отправкой по сокету

Quantum Harmonizer
09.10.2018
22:26:40

Beholder
09.10.2018
22:26:44
обвязка разная, зачем какие-то общие интерфейсы?
боюсь что получится какая-то высшая математика в духе Хаскеля и теории категорий
а на практике будет неудобно

Quantum Harmonizer
09.10.2018
22:43:03

Google

Алексей
10.10.2018
06:31:31
Народ, а к кому можно обратиться тут на тему предложения по улучшению bytecode компиляции котлина?

Konstantine
10.10.2018
06:35:11

Алексей
10.10.2018
06:35:32
я прогрузить вот пытаюсь...
Кроме того, кидать это сразу в issue не хочу, поскольку пока что на уровне предложения

Konstantine
10.10.2018
06:37:44

Алексей
10.10.2018
06:37:49
ок
спасибо

Admin
ERROR: S client not available

Konstantine
10.10.2018
06:43:33
ок
Но разработчики вроде бывают тут, так что можешь и сюда вбросить.

Алексей
10.10.2018
06:43:54
сейчас issue сделаю и сюда вброшу
чтоб если что хоть сказали, что не так
Вот
Видел что-то похожее, но как понял, несколько отличающееся от моей идеи

Alexandr
10.10.2018
06:51:16
сломать легко

Алексей
10.10.2018
06:51:40

Alexandr
10.10.2018
06:51:54
ну и хз на счет перфоманса

Алексей
10.10.2018
06:52:00
ну и да, это причина, по которой расчёт hashCode значения ленивый
ну и хз на счет перфоманса
для одного поля улучшения само собой не будет, но если полей больше одного - уже будем в плюсе после второго (а чаще и первого) использования hashCode

Leonid
10.10.2018
07:00:46
А если там val a: MutableList ?

Konstantin
10.10.2018
07:01:46
А кто-нибудь знает, как можно гарантировать последовательность завершения запущенных независимо корутин?
Вот например
fun test() {
printDelayed("1")
printDelayed("2")
printDelayed("3")
}
fun printDelayed(arg: String) {
GlobalScope.launch {
delay(2000)
println(arg)
}
}
И тут вывод не обязательно будет 1 2 3

Google

Egor
10.10.2018
07:03:22
Естественно необязательно, это же основы асинхронного программирования

Алексей
10.10.2018
07:03:38

Egor
10.10.2018
07:03:46
Зачем вам контролировать порядок выполнения асинхронных операций? Это обычно очень плохая практика

Alexander
10.10.2018
07:03:48
Просто надо print делать не в корутине а после await

Алексей
10.10.2018
07:04:05
потом перед запуском делаешь job.start()
хотя можно и join(), кажется - она автоматически запустится

Leonid
10.10.2018
07:04:50
Const то нету))

Алексей
10.10.2018
07:05:05
я ж описал, что как вариант - сделать переменную, которая будет лениво инициализироваться и хранить хэшкод постоянной части data класса, чтобы не высчитвать эту часть каждый раз
постоянная - это всякие строки, числа и data классы, в которых все поля - постоянные

Vladimir
10.10.2018
07:07:42
А вообще идея использовать сложные объекты со списками в качестве ключей HashMap весьма сомнительная. Скорее всего, это редко нужно. Достаточно редко, чтобы не заморачиваться на эту тему в компиляторе, по крайней мере до появления иммутабельных типов.

Алексей
10.10.2018
07:10:30
getfield #n // n is field number in bytecode
dup
ifnull // go to near pop because last object is null
invokevirtual #113 // call of hashCode() of last object
goto n // n here is number of near iconst_0
pop
iconst_0 // it is go to here
iadd // add last calculated hashcode
bipush 31 // put 0001111 onto top of stack
imul // multiply last hashcode and 00011111 (as understand it is for more entropy)

Mikhail
10.10.2018
07:11:01

Алексей
10.10.2018
07:11:06

Mikhail
10.10.2018
07:11:33
А смысл оптимизировать пару умножений?