@kotlin_lang

Страница 510 из 982
Boris
25.01.2018
19:54:14
Если использовать асинхронную отправку, то сложно в рх встроить

Stas
25.01.2018
19:54:51
ну можно в rx тоже самое сделать, получится Single.from({subsriber -> })

Boris
25.01.2018
19:55:13
И?

Как это позволяет использовать асинхронный клиент?

Google
Stas
25.01.2018
19:56:31
блин, легко.

может я не понимаю чего-то. на rx можно это записать и будет даже нагляднее

Boris
25.01.2018
19:57:06
Пришли небольшой пример

Stas
25.01.2018
19:57:17
я бухой, завтра подумаю

Boris
25.01.2018
19:57:51
Stas
25.01.2018
19:58:59
я в целом рассуждаю: мне кажется, что поток событий, операторы и шедулеры понятнее и мощнее, чем корутины

Boris
25.01.2018
19:59:43
Я без претензии, я может что-то про рх не знаю, но вот насколько я понимаю, они работают немного по другому

Andrew
25.01.2018
20:00:55


Поясните кто-нибудь, пожалуйста, что я делаю не так?

Stas
25.01.2018
20:01:16
val

Boris
25.01.2018
20:01:20
Val

Andrew
25.01.2018
20:01:32
Кошмаааар, пора домой. Спасибо!

Google
Boris
25.01.2018
20:01:42
Даже идея тебе намекала ?

Andrew
25.01.2018
20:02:42
Пока я не написал это самое "is Derived -> " -- val тоже будет неиспользуемым, потому я уже внимание не обращаю на этот серенький и подчёркнутый текст.

Boris
25.01.2018
20:04:43
я в целом рассуждаю: мне кажется, что поток событий, операторы и шедулеры понятнее и мощнее, чем корутины
В том и дело, что мне тоже нравится рх, но каналы могут (пока если немного руками поработать) все это и намного безопаснее и без бэкпрешер

Gleb
25.01.2018
20:05:20
Ребята, а может кто-то коротко и толково изложить, что есть это "suspend"? А то я не очень понимаю
Если совсем просто, то при вызове suspend-функции ей в коллбек передается continuation - все, что находится в вызывающей функции после вызова Как thenApply в CompletableFuture Внутри все немного сложнее, конечно, но это самое простое объяснение

Stas
25.01.2018
20:05:44
не вдавался в каналы глубоко. завтра почитаю...

https://stackoverflow.com/questions/42066066/how-kotlin-coroutines-are-better-than-rxkotlin по теме

Artem
25.01.2018
20:06:58
Спасибо

Gleb
25.01.2018
20:09:32
Спасибо
Если интересно глубже, вот: https://youtu.be/HYhJmK9nKS4 https://youtu.be/fd9EVSxINKw

Igor
25.01.2018
20:10:13
Как это позволяет использовать асинхронный клиент?
Да можно использовать “асинхронный клиент” даже если оно на корутинах fun loadDataRx(url: String): Single<String> = rxSingle { loadData(url) } suspend fun loadData(url: String): String = … Просто берешь kotlinx-coroutines-rx2

Igor
25.01.2018
20:13:49
Вторая попытка правильно задизайнить реактивные стримы в rxjava (rxjava 2.0)

Руслан
25.01.2018
20:14:12
Igor
25.01.2018
20:14:53
Имхо вышло еще хуже. По крайней мере методов стало 2 раза больше (чем нужно) + куча левых типов стримов.

Bogdan
25.01.2018
20:14:53
Вторая попытка правильно задизайнить реактивные стримы в rxjava (rxjava 2.0)
ну я про это и подумал, решил просто спросить, и как успехи ? И кто этим занимается?

Boris
25.01.2018
20:16:42
К тому же, суть рх от этого не меняется, каналы работают немного по другому

Sergey
25.01.2018
23:36:57
вроде поборол MDCContext, но реализация пока не сильно нравится

class Mdc(private val ctxt: Map<String, String>) : AbstractCoroutineContextElement(Mdc) { companion object Key : CoroutineContext.Key<Mdc> fun apply() = MDC.setContextMap(ctxt) } launch(newSingleThreadContext("main") + Mdc(MDC.getCopyOfContextMap())) { coroutineContext[Mdc]?.apply() ...

надо через интерцепторы попробовать сделать

https://gist.github.com/enleur/1b552483c7a540c7d29ea1f9c64f5e06

Google
Sergey
25.01.2018
23:57:15
как-то так

Даниил
26.01.2018
00:13:44
чуваки, ничё если я тут попродвигаю годный пропозал?

https://github.com/Kotlin/KEEP/pull/87

TL;DR Чуваки запилили либу с поддержкой HKT и тайпклассов на Kotlin. Сделано оно всё сейчас через annotations processing и кодогенерацию, выглядит местами жутковато но в целом охуенно. Но на этом они не остановились и решили запилить форк компилятора с поддержкой тайпклассов на уровне языка. Ну и соответствующий пропозал запилили, ссылка выше.

В общем призываю почитать и полайкать пропозал, поучаствовать в дискуссии и всё такое



Ivan
26.01.2018
00:38:31
А можно Вас попросить немного ссылок для нубов в теории категорий?

Даниил
26.01.2018
00:42:51
А в чем преимущество тайпклассоов?
Ну это такие интерфейсы на стероидах.

Во-первых, класс ничего не знает об инстансах. То есть можно определить свою реализацию тайпкласса для класса, определённого в другом модуле или вообще другой библиотеке. Не "классы наследуются от тайпклассов", а "инстансы реализуют тайпклассы для классов", как-то так. Это удобно, поскольку делает механизм "наследования" (не совсем классического, поэтому в кавычках) более удобным для расширения сущностей новым поведением.

Во-вторых, инстанс тайпкласса представляет собой отдельный объект, это решает проблему с тем что в интерфейсах нельзя описывать статические методы.

whalemare
26.01.2018
00:48:04
Звучит интересно, но нужно смотреть на семплах потому что пока не очень понятно, т.к все что я могу предоставить это метод, написанный через экстеншены (чтобы из другого модуля юзать например) с дефолтными параметрами, которые принимают интерфейс чтобы что то сделать. Вот как то так я себе это вообразил, но думаю что ошибаюсь

whalemare
26.01.2018
00:50:57
Ок, спасибо, поизучаю сегодня) Я думаю не нужно, думаю разберусь, если что - напишу

Даниил
26.01.2018
00:53:20
А можно Вас попросить немного ссылок для нубов в теории категорий?
Конкретно содержание пропозала никак с теоркатом не связано) А если ты про саму либу, то могу накидать ссылок из туторов по хаскелю, там в общем-то ничего сложного и опять-таки чтобы основные концепции понять никакой теории категорий не нужно, в теоркат скорее можно полезть потом если интересно будет откуда всё это в том же хаскелле появилось)

А можно Вас попросить немного ссылок для нубов в теории категорий?
Документация Arrow – http://arrow-kt.io/docs/ Тут пока не все разделы заполнены, но начать наверное лучше отсюда. Understanding Monads – https://en.wikibooks.org/wiki/Haskell/Understanding_monads Гайд который даёт базовое понимание что такое вообще монада и какой практический смысл этой абстракции, ну и дальше в подразделах описание реализаций самых используемых монад. Typeclassopedia – https://wiki.haskell.org/Typeclassopedia Описание различных тайпклассов в Haskell (но большая часть применима и к Arrow) и их взаимосвязей. Главы из Haskell Book Антона Холомьёва – http://anton-k.github.io/ru-haskell-book/book/6.html, http://anton-k.github.io/ru-haskell-book/book/15.html Тут на русском, первая ссылка просто про функторы и монады, вторая про то же но с точки зрения теории категорий, если будет интересно.

Даниил
26.01.2018
01:38:43
без толковых гайдов и примеров, либа не стоит свеч
Ну думаю всё будет со временем, может я попробую поконтрибьютить в документацию

Google
Bogdan
26.01.2018
06:33:01
хочу попробывать kotlin\native, но я так понимаю без CLion не обойтись? Но она платная, можно какие-нибуть альтернативы?

Igor
26.01.2018
06:34:21
чуваки, ничё если я тут попродвигаю годный пропозал?
Чет баян. Думал они совсем забили, ан нет таки начали компилятор пилить.

хочу попробывать kotlin\native, но я так понимаю без CLion не обойтись? Но она платная, можно какие-нибуть альтернативы?
Вот же тут раздают бесплатный триал на 4 месяца для “early adopters” - думаю хватит что бы попробовать. https://blog.jetbrains.com/kotlin/2017/12/kotlinnative-plugin-update/

Даниил
26.01.2018
07:59:09
хотел идти создавать issue в репу котлина на тему того что какого чёрта нельзя дата классы с пустым списком аргументов делать нагуглил что до 1.0 оно было, потом депрекейтнули

Даниил
26.01.2018
08:01:56
да, когда речь идёт о дженериках например

Даниил
26.01.2018
08:03:23
сейчас Option реализуют в том же Arrow так: sealed class Option<out T> data class Some<T>(value: T): Option<T>() object None: Option<Nothing>()

кто скажет почему эта реализация неправильная?)

Bogdan
26.01.2018
08:04:34
Посути для дата класса джкенерик должен быть определен

Или попробуй refield но он с инлайном

Даниил
26.01.2018
08:05:52
мне кажется ты немного не понял о чём я

Bogdan
26.01.2018
08:06:01
Почему обычный класс не заюзать?

Даниил
26.01.2018
08:06:03
обычно вместо пустых дата-классов создают просто object

balolam
26.01.2018
08:06:25
Bogdan
26.01.2018
08:06:35
Ага

Даниил
26.01.2018
08:06:37
И ты можешь сделать просто Any
вооот, или Nothing как в примере выше

суть в том что возвращаясь к реализации Option выше - это неверно)

Bogdan
26.01.2018
08:07:08
Ну так дата класс это уже что то определеное

Google
Даниил
26.01.2018
08:07:24
ну если с оглядкой на Haskell делать (извините), то None тоже должен быть типизирован

то есть None<Int> нельзя присвоить туда где должен быть Option<String>

Bogdan
26.01.2018
08:07:43
Котлину нужно ведь сгенерить методы для него

Убери дата для начала

balolam
26.01.2018
08:08:40
Суть же data classes в том, что будут сгенерены методы опираясь на поля класса. А если их нет, то выходит и нет в надобности наличия data класса

Даниил
26.01.2018
08:09:11
Убери дата для начала
и придётся самому реализовывать toString и equals например

ведь если я сделаю class None(), то None() != None()

ящитаю пустой дата-класс должен быть по семантике примерно как датакласс содержащий юнит

ну типа data class None(val _dummy: Unit = Unit), как-то так, только toString() другой

это действительно сделало бы жизнь в некоторых моментах чуть проще

а минусов никаких не вижу

balolam
26.01.2018
08:11:37
Вообще, тут проблема ещё у вас в другом. Скажите, как вы собираетесь использовать после sealed класс?

Даниил
26.01.2018
08:11:57
ну я же пример кинул, это стандартный Option

balolam
26.01.2018
08:12:05
Потому что добавив там дженерик вы уже делаете что-то странное

Я к тому, что такая задача уже поставлена не верно

Даниил
26.01.2018
08:12:19
Потому что добавив там дженерик вы уже делаете что-то странное
неа, это нормальная практика для реализации Option)

Bogdan
26.01.2018
08:12:22
Вообще, тут проблема ещё у вас в другом. Скажите, как вы собираетесь использовать после sealed класс?
Человек фигню делает, сам таким занимаюсь, но вижу не получается пишу по другому

Даниил
26.01.2018
08:12:36
я к тому что в нормальных языках это делается нормально

Artem
26.01.2018
08:13:00
А Котлин — не нормальный?)

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