
Bogdan
12.09.2018
12:26:33
хмхмхм
mutableList<MyClass<Int>> - добавлять можно только с Int.
mutableList<MyClass<Double>> - обавлять только с Double.
mutableList<MyClass<Number>> - с любыми числами.
mutableList<MyClass<Any>> - любой не нулабле тип.
mutableList<MyClass<Any?>> - все типы
@Denis422 попробуй подобавлять в разные вариации, для наглядности убери MyClass

Denis
12.09.2018
12:29:36
сейчас попробую

Sergey
12.09.2018
12:35:18

Google

Руслан
12.09.2018
12:35:45
Ну там например семантика поменялась, так что сломалось очень много чего)
Например

Sergey
12.09.2018
12:35:54
ты про скоупы?

Руслан
12.09.2018
12:35:55
Вот так было

Sergey
12.09.2018
12:37:19
а.. ну оно вроде пытается в GlobalContext запустить корутину

Руслан
12.09.2018
12:37:21
т.е. runBlocking ждет всех child, а child выставляется автоматом

Sergey
12.09.2018
12:37:46
по крайней мере у меня в коде щас везде на launch ругается, говорит депрекейтед

Руслан
12.09.2018
12:38:23

Sergey
12.09.2018
12:38:57
но вообще мне не хватало этих дочерних скоупов
приходилось везде самому передавать coroutineContext

Руслан
12.09.2018
12:39:23

Google

Sergey
12.09.2018
12:40:44
вообще большой соблазн все в Dispatchers.IO пускать
вот прям интерцептор сделать с withContext(IO) { proceed() }

Руслан
12.09.2018
12:41:07

Sergey
12.09.2018
12:41:10
один хрен в одном тредпуле крутится с Default)
ага, у меня несколько сервисов начали вывешиваться, оказалось бага с IO
щас вроде пофиксили, но еще не проверял

Руслан
12.09.2018
12:41:46

Sergey
12.09.2018
12:41:47
ну и лимит в 64 потока немного пугает

Руслан
12.09.2018
12:43:30

Sergey
12.09.2018
12:43:50
может оказаться мало, особенно там где база юзается блокирующая
ну оно настраивается через системные аргументы
но я пока на CachedPool посижу?
еще не хватает для прода возможности узнать кол-во активных корутин, чтобы метрику экспортить

Руслан
12.09.2018
12:50:24
Я вот маленький проектик смигировал, сейчас покажу diff)

Sergey
12.09.2018
12:50:57
когда Default диспатчер пустят на пуле с IO, тогда начну юзать его

Igor
12.09.2018
12:52:22

Sergey
12.09.2018
12:52:56
на данный момент это не вариант

Konstantine
12.09.2018
12:53:15

Google

Sergey
12.09.2018
12:53:53

Руслан
12.09.2018
12:54:18

Sergey
12.09.2018
12:54:23
сейчас OkHttp нам под сотню потоков плодит, после того как заменим будет всего 1

Руслан
12.09.2018
12:54:56

Sergey
12.09.2018
12:55:36
могло быть и хуже

Igor
12.09.2018
12:55:41

Sergey
12.09.2018
12:55:52

Руслан
12.09.2018
12:56:13
могло быть и хуже
Да, проект маленький, я за 2 минуты все файлы глазами пробежался. Рабочий думаю час займет ?

Igor
12.09.2018
12:56:21

Sergey
12.09.2018
12:56:59

Igor
12.09.2018
12:57:31
хм, ну там же только одно соединение переиспользуется и есть мультиплексирование

Жабра
12.09.2018
12:58:17

Sergey
12.09.2018
12:58:35


Руслан
12.09.2018
13:01:44
А чё за GlobalScope? Я читал описание, но не сильно понял.
Выше было два примера кода
fun main(args: Array<String>) = runBlocking<Unit> {
// this: CoroutineScope
val job = launch {
// launch new coroutine in the scope of runBlocking
delay(1000L)
println("World!")
}
job.join()
println("Hello,")
}
вот так раньше нужно было писать чтобы runBlocking дождался выполнения launch, теперь launch вызывается на текущем CoroutinesScope который прилетает из runBlocking и runBlocking ждет автоматом launch:
fun main(args: Array<String>) = runBlocking<Unit> {
// this: CoroutineScope
launch {
// launch new coroutine in the scope of runBlocking
delay(1000L)
println("World!")
}
println("Hello,")
}
Если у тебя вдруг нету parent CoroutineScope (все примеры кода вот тут https://github.com/Heapy/tgto/commit/ffa7ac54e461b3867791899b85dcd4a7a3f9efbd) то ты вызываешь различные корутин билдеры на GlobalScope и все становится как раньше, опять же если говорить про наш пример:
fun main(args: Array<String>) = runBlocking<Unit> {
// this: CoroutineScope
val job = GlobalScope.launch {
// launch new coroutine in the scope of runBlocking
delay(1000L)
println("World!")
}
job.join()
println("Hello,")
}


Жабра
12.09.2018
13:02:17


Sergey
12.09.2018
13:06:19
https://github.com/JetBrains/kotlin/releases/tag/build-1.3.0-rc-2 RC-2 подьехал

Leonid
12.09.2018
13:13:21
это просто номера билдов по порядку, успокойтесь ?

Sergey
12.09.2018
13:13:30
?

Ivan
12.09.2018
13:53:52

Google

Руслан
12.09.2018
13:55:43
Ради интереса переписал бота с использованием Koin, не скажу что кода стало прям меньше и лучше читаться
https://github.com/Heapy/tgto/commit/6094e15ea6d27e5dd9be1df049f13520cfba981f

Sergey
12.09.2018
13:56:23
и всяко лучше go run() ?

Руслан
12.09.2018
13:59:00

Sergey
12.09.2018
13:59:41
мы у себя пока решили полотна писать. если слишком большое полотно, то наверное этот сервис слишком много делать стал

Konstantine
12.09.2018
14:00:48
А я вот как-раз думаю либо koin, либо kodein в пет-проджекте использовать. Не могу решить ?

Sergey
12.09.2018
14:00:51
ну и из main вынесли это дело в отдельные пакеты, на выходе получается только контекст класс, в котором торчат наружные классы

Admin
ERROR: S client not available

Sergey
12.09.2018
14:01:02
которые будут юзаться в роутинге и тд

Roman
12.09.2018
14:01:37

Sergey
12.09.2018
14:01:48

Konstantine
12.09.2018
14:02:35

dimiii
12.09.2018
14:02:43

Sergey
12.09.2018
14:02:50

Konstantine
12.09.2018
14:03:27

Sergey
12.09.2018
14:07:50
если ты не собираешься сервис локатор конечно лепить

Руслан
12.09.2018
14:08:26
Т.е. просто хранить всё большим списком переменных к которым обращаться?)
Да, все так)
Ну вот я Koin на второй проект втащил, и не зашло второй раз, из-за того что листы удобно нельзя инжектить, из-за того что по-умолчанию он из классов через конструктор бин не создает. Надо дать второй шанс Kodein. Там кучу модулей каких-то наделали, может и constructor injection завезли и другие ништяки. Koin слишком простой, заточен под android

Google

Sergey
12.09.2018
14:13:10

Nikita
12.09.2018
14:15:15

Konstantine
12.09.2018
14:15:28

Руслан
12.09.2018
14:16:16

Nikita
12.09.2018
14:16:56
еще бы для Map так же сделать)

Sergey
12.09.2018
14:17:09
не понял какая цепочка
ktor route -> A.call() -> B.call() -> C.call() -> .... -> реальный suspended http client. и вот везде нужно проставлять suspend
у меня иногда такое ощущение что 80% кода помечено suspend) можно даже посчитать

Руслан
12.09.2018
14:17:50
ну да, а как по другому?
В Котлине решили что иметь красные и синии функции это фишка)

Sergey
12.09.2018
14:18:46
может когда-то будет как open
все суспендед по-дефолту, пока не укажешь обратное)

Руслан
12.09.2018
14:19:01

Sergey
12.09.2018
14:19:55
бред конечно несу) но для MDC контекстов удобств сделали, может и тут чего-то придумают для приложений которые полностью асинхронные

Andrey
12.09.2018
14:21:24

Руслан
12.09.2018
14:22:05

Sergey
12.09.2018
14:22:33

Andrey
12.09.2018
14:23:43
go lang...
Всё, что я успел увидеть в go, пока его немного щупал, привело меня к мысли, что весь язык построен на таких себе решениях, так что я решил, что в go я не ездец.

Руслан
12.09.2018
14:24:18
Парни назвали компанию как DI и теперь их сайт первый для меня в duckduckgo ? http://kodein.net/en/
Ну понятно что это их DI, но все равно смешанные чувства