@kotlin_lang

Страница 861 из 982
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
сейчас попробую

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
по крайней мере у меня в коде щас везде на launch ругается, говорит депрекейтед
вот так где ругается, кажется что ты хотел запускать именно в GlobalScope, так что нужно просто пройтись и пофиксить ворнинги

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

приходилось везде самому передавать coroutineContext

Руслан
12.09.2018
12:39:23
т.е. runBlocking ждет всех child, а child выставляется автоматом
мне кажется это поведение где-то могло сломать семантику. возможно код изначально в таком месте был не очень, но все равно стремно)

Google
Sergey
12.09.2018
12:40:44
вообще большой соблазн все в Dispatchers.IO пускать

вот прям интерцептор сделать с withContext(IO) { proceed() }

Руслан
12.09.2018
12:41:07
вообще большой соблазн все в Dispatchers.IO пускать
Чет в стремно в проде юзать, особенно после багов которые пофиксили

Sergey
12.09.2018
12:41:10
один хрен в одном тредпуле крутится с Default)

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

щас вроде пофиксили, но еще не проверял

Руслан
12.09.2018
12:41:46
приходилось везде самому передавать coroutineContext
Вот у меня такого не было, по другому использовал

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, тогда начну юзать его

Я вот маленький проектик смигировал, сейчас покажу diff)
мне осталось OkHttp на Ktor client заменить и запросы к базе на withContext(IO) позаворачивать. а так уже везде корутины

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

Google
Sergey
12.09.2018
12:53:53
Какие плюсы у ktor перед okhttp?
ktor это обертка над разными движками, okhttp один из них. мы будем apache async юзать, для неблокирующих операций

Руслан
12.09.2018
12:54:18
Я вот маленький проектик смигировал, сейчас покажу diff)
https://github.com/Heapy/tgto/commit/ffa7ac54e461b3867791899b85dcd4a7a3f9efbd

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

Руслан
12.09.2018
12:54:56
https://github.com/Heapy/tgto/commit/ffa7ac54e461b3867791899b85dcd4a7a3f9efbd
Вот, все что пришлось сделать это везде прописать GlobalScope, и в withContext поправить сигнатуру

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

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

Igor
12.09.2018
12:56:21
где именно?
Куда okhttp коннектится

Sergey
12.09.2018
12:56:59
Куда okhttp коннектится
не, там много мест куда он ходит ну и вообще на общении между серверами от http2 толку мало

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

Жабра
12.09.2018
12:58:17
Sergey
12.09.2018
12:58:35
хм, ну там же только одно соединение переиспользуется и есть мультиплексирование
80% провайдеров... там приходится делать черную магию с хедерами и прикидываться что ты SoapClient, чтобы оно работало) о http/2 и речи не идет

Руслан
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,") }

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
https://medium.com/@elizarov/structured-concurrency-722d765aa952
Я правильно понимаю, что разработчики Котлина сейчас заявили "современные языки реализовали async/await (и аналогичные конструкции) в корне неправильно, давайте по новой"?

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
я начал переписывать, но бросил. выходит хуже чем полотно зависимостей
Меня больше всего не устраивает работа с листами, и то что нету встроенных хуков жизненного цикла. Получается что действительно толку от него не слишком много. А еще провайдеров нету из коробки, чтобы можно было писать провайдер и делать из него singleton

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
которые будут юзаться в роутинге и тд

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

Konstantine
12.09.2018
14:02:35
если компонентов меньше 100, то попробуй полотно из зависимостей вручную собирать
Хм, есть пример того, что имеешь ввиду? А то так не понятно.

dimiii
12.09.2018
14:02:43
А я вот как-раз думаю либо koin, либо kodein в пет-проджекте использовать. Не могу решить ?
Вот пример пет-проджекта, замечательно обходящегося без всего этого https://github.com/Heapy/tgto Так что есть третий вариант

Sergey
12.09.2018
14:02:50
Хм, есть пример того, что имеешь ввиду? А то так не понятно.
в пулреквесте у руслана красным все что) https://github.com/Heapy/tgto/commit/6094e15ea6d27e5dd9be1df049f13520cfba981f#diff-37e6d4c2dacc73fb21133956a1afe112

Konstantine
12.09.2018
14:03:27
в пулреквесте у руслана красным все что) https://github.com/Heapy/tgto/commit/6094e15ea6d27e5dd9be1df049f13520cfba981f#diff-37e6d4c2dacc73fb21133956a1afe112
Т.е. просто хранить всё большим списком переменных к которым обращаться?)

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
Они уже давно это заявили, уже ни раз объясняли почему suspend лучше чем async/await.
вообще немного напрягает если есть цепочка вызовов и скажем суспендится только крайний вызов и для этого приходится всю цепочку помечать. веселее выходит если внутри еще лямбды юзать

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
еще бы для Map так же сделать)
Map эмулируется через List объектов с полем name) не так больно как не иметь даже list из коробки

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

Andrey
12.09.2018
14:21:24
все суспендед по-дефолту, пока не укажешь обратное)
В дефолт языка вносить инструмент для работы с concurrency - такое себе решение КМК.

Sergey
12.09.2018
14:22:33
go lang...
к нему была отсылка

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

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

Ну понятно что это их DI, но все равно смешанные чувства

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