
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

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

Bogdan
25.01.2018
20:12:17

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

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
А можно Вас попросить немного ссылок для нубов в теории категорий?

whalemare
26.01.2018
00:39:41
https://m.habrahabr.ru/company/tinkoff/blog/147759/


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


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

Даниил
26.01.2018
00:48:48
Могу ещё сюда примеров напридумывать.

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


Bogdan
26.01.2018
01:27:15

Даниил
26.01.2018
01:38:43

Google

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

Igor
26.01.2018
06:34:21

Bogdan
26.01.2018
06:38:53

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

balolam
26.01.2018
07:59:38

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

Bogdan
26.01.2018
08:03:02

Даниил
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
суть в том что возвращаясь к реализации 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
ведь если я сделаю 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

Bogdan
26.01.2018
08:12:22

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

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