
Илья
17.07.2018
17:03:21


Quantum Harmonizer
17.07.2018
17:05:48
1. Всё в кучу. Single — это фьюча (CompletableFuture), Flowable — поток событий (канал), BehaviorSubject — проперти. Мне кажется, это разные концепции и их лучше не сваливать вместе.
2. Неудачные интерфейсы. Single != Observable, Completable != Single<Nihuya>.
3. Монолит. 10к методов, стопицот комбинаторов. Обычно из этого всего используется только map и flatMap. Давно пора нарезать на модули.
4. Плохо ложится на ОО язык. Операторы захардкожены в классах Observable/Single, свои не добавить.
В Java нужно было использовать декораторы (new MappedObservable(new DebouncedObservable(getObservableSomewhere(), 500, MILLISECONDS), ::mapperFunction)), в Kotlin можно прокинуть создание декораторов через extension-функции (getObservableSomewhere().debounce(500, MILLISECONDS).map(::mapperFunction)).
5. Стрёмные subscribeOn/observeOn. Они возвращают такой же обзёрвабл. Непонятно, например, к чему приведёт obs.subscribeOn(io()).subscribeOn(mainThread()). subscribe/observe должны возвращать обзёрвабл другого типа, который уже нельзя подписать ни на какой шедулер.
Ну это всё минусы отдельной реализации и детали.
А если нужна базовая асинхронщина, то какой бы прекрасной RxJava ни была, она не сильно много профита привнесёт.

Google

Илья
17.07.2018
17:08:49
круто, спасибо огромное )

Igor
17.07.2018
17:11:37
Еще из минусов, что RxJava заточена под Java, а RxKotlin всего лишь сахарная-обертка, без учета специфики языка.
К примеру на RX.NET (полностью написан на C#) вообще нет Completable/Single, потому что они не нужны в языках с async/await.

Quantum Harmonizer
17.07.2018
17:12:07

Konstantine
17.07.2018
17:19:55

Quantum Harmonizer
17.07.2018
17:20:27

Konstantine
17.07.2018
17:20:39

Quantum Harmonizer
17.07.2018
17:21:56
С каких пор?)
Корутины — это языковая фича.
kotlinx.coroutines — библиотека, построенная поверх этой фичи.

Konstantine
17.07.2018
17:22:31

Quantum Harmonizer
17.07.2018
17:22:58

Denko
17.07.2018
17:23:16
Ну это ж уже не из коробки

Konstantine
17.07.2018
17:23:19

Igor
17.07.2018
17:23:31

Konstantine
17.07.2018
17:24:32

Google

Denko
17.07.2018
17:26:13

Igor
17.07.2018
17:27:04


Andrew
17.07.2018
17:41:58
В язык уже разве есть встроенные места, из коробки, где можно использовать суспенды?
Мне казалось, что все лаунчи и пр. в библиотеке.
Вынесение всех вещей, которые можно реализовать в библиотеке, в библиотеку — это одна из основных фишек корутин. Которая, к примеру, помогает щас людям в удобном для них темпе корутины в K/N имплементить — на уровне компилятора они там давно уже есть, kotlinx.coroutines ещё в процессе портирования, а те, кто хотели, успели пощупать там корутины и без неё.
Суспенды из коробки вполне можно использовать с buildSequence при необходимости.
Ну и да, вообще странно возмущаться необходимостью подтягивать kotlinx.coroutines, таская за собой в явном виде stdlib ;)
Что вообще имелось ввиду под "В язык уже разве есть встроенные места, из коробки"?


Konstantine
17.07.2018
17:42:52
Вынесение всех вещей, которые можно реализовать в библиотеке, в библиотеку — это одна из основных фишек корутин. Которая, к примеру, помогает щас людям в удобном для них темпе корутины в K/N имплементить — на уровне компилятора они там давно уже есть, kotlinx.coroutines ещё в процессе портирования, а те, кто хотели, успели пощупать там корутины и без неё.
Суспенды из коробки вполне можно использовать с buildSequence при необходимости.
Ну и да, вообще странно возмущаться необходимостью подтягивать kotlinx.coroutines, таская за собой в явном виде stdlib ;)
О каком возмущении речь?

Andrew
17.07.2018
17:43:46

Konstantine
17.07.2018
17:44:13

Andrew
17.07.2018
17:45:14

Igor
17.07.2018
17:46:08

Andrew
17.07.2018
17:46:33
Вероятно, в каких-то редких случаях может быть полезно не тянуть за собой весь stdlib и kotlinx.coroutines. От тех же плюсов оторвать stdlib намноооого сложнее.
Точнее от C сложнее, от C++ почти невозможно.

Konstantine
17.07.2018
17:47:17
Хотя сейчас может там все не так страшно, не скажу

Quantum Harmonizer
17.07.2018
17:47:50

Антон
17.07.2018
17:49:05
Хороший ли курс как для быстрого вливания? https://videos.raywenderlich.com/courses/128-programming-in-kotlin/lessons/1

Andrew
17.07.2018
17:49:28
Пробовал отрывать stdlib от Kotlin?
Инлайны и интринсики? Я предполагаю, что нельзя просто так взять и не подключать её вообще, но я сомневаюсь, что там всё хоть сколь-нибудь сопоставимо с аналогичной задачей для плюсов.
Но да, заглядывал только по мере надобности.
Окей, Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics.
:)

Quantum Harmonizer
17.07.2018
17:58:13
Ну и kotlin.Unit нужен, и TypeIntrinsics, и много чего ещё

Andrew
17.07.2018
18:03:02
Я наивно думал, что core/builtins со своими стрингами и юнитами не относится к stdlib. Oh well.

Google

Quantum Harmonizer
17.07.2018
18:03:35
String/List/MutableList и правда не существует.
А Unit и Intrinsics — вполне.

Alexander
17.07.2018
18:04:02
Надо отдать должное, стандартная библиотека - крошечная. Хуже с рефлектами, но и там не фатально.

Quantum Harmonizer
17.07.2018
18:04:46
Ну в сравнении с раздутыми монолитами вроде RxJava — крошечная, да.

Alexander
17.07.2018
18:08:04
По сравнению с чем угодно крошечная, LogBack уже сравнимых размеров

Quantum Harmonizer
17.07.2018
18:09:05

Alexander
17.07.2018
18:10:00
Протобуф у меня полный, он точно больше. Кстати спасибо за идею.

Leonid
17.07.2018
18:27:07

Наиль
17.07.2018
18:30:37
Ok, попробую, спасибо за наводку)

Bogdan
17.07.2018
18:32:45

Konstantine
17.07.2018
18:33:12

Sergey
17.07.2018
18:33:18
Programming Offtop
Правило только одно, не спамить
https://t.me/pofftop

Ilya
17.07.2018
19:10:09
Есть у кого на примете опен соурс проекты на ktor и/или exposed?

Quantum Harmonizer
17.07.2018
19:11:57

Kirill
18.07.2018
04:54:27
Многие не любят jvm за то, что она много оперативы ест.
Если в кторе появится поддержка kotlin native, прога, написанная на ktor с использованием натива будет есть меньше памяти и будет ли она шустрее?

Bogdan
18.07.2018
05:00:22
Там ток подсчет ссылок пока

Kirill
18.07.2018
05:02:10
Лол

Bogdan
18.07.2018
05:03:55
Лол
Со временем большенство байт кода превратится в нативный, почитай про платформу джвм

Kirill
18.07.2018
05:06:37
Любопытно

Google

Admin
ERROR: S client not available

Fag
18.07.2018
05:06:40
lol

Alexander
18.07.2018
05:35:25
Лол
Рантаймовые оптимизации JVM на однотипных операциях, таких как обработка серверных запросов потенциально мощнее, чем опимизация нативного кода. Натив побеждает на короткоживущих маленьких програмках, но для сервера ситуация обратная.
Про память боее сложно, JVM ее не экономит и в среднем будет использовать в полтора-два раза больше, чем нативное приложение. Но когда мы говорим о нативе, мы говорим о Rust, а не о С++, потому что в последнем случае, написать человеческое управление памятью в большом проекте так, чтобы оно было эффективнее, чем JVM-GC очень и очень сложно.
Очень-очень ждем. Ходят слухи, что есть внеутренний секретный мост между KN и KJVM. Только недокументирвоанный. Очень нужная фича. К сожалению, от С++ не спасет, но хоть будут обертки для голого С без SWIG.

Rikland
18.07.2018
07:01:16
С чего бы там быть gc? Там вроде как подсчет ссылок

Alexander
18.07.2018
07:04:34
Я пока не видел, чтобы кто-то говорил о GC.

Alexey
18.07.2018
07:05:25
Ну как бэ можно скомпилить на целевой машине, так вобщем то и делают обычно

Alexander
18.07.2018
07:09:01
Скомпилировать под железно и соптимизировать код под железо - это разные вещи. Компиляторов, настолько умных, что способны делать оптимизации прямо под железо, довольно мало в природе и они обычно на встраевымых системах.

Alexey
18.07.2018
07:13:18
А как по вашему тогда это делает JIT?

Rikland
18.07.2018
07:15:55

Alexey
18.07.2018
07:16:43
Я это к тому, что JIT настолько же не умён как компиляторы, которые оптимизируют код под железо

Quantum Harmonizer
18.07.2018
07:18:11
JIT может делать спекулятивные оптимизации

Rikland
18.07.2018
07:18:52

Vladislav
18.07.2018
07:21:38

Роман
18.07.2018
07:22:37
да и сам llvm по сути тоже jit

Alexander
18.07.2018
07:23:31

Роман
18.07.2018
07:24:20
а зачем тогда он, чем он лучше gcc?

Rikland
18.07.2018
07:24:42

Alexander
18.07.2018
07:25:20
Тем, что у него есть публичный хороший и удобный IR, в который можно компилировать разные языки, а gcc заточен под с/++

Google

Alexander
18.07.2018
07:26:05

Роман
18.07.2018
07:26:15
IR?

Alexander
18.07.2018
07:26:28
Intermediate representation
биткод

Роман
18.07.2018
07:27:39
а, теперь понял в чём соль

Rikland
18.07.2018
07:28:46

Alexander
18.07.2018
07:29:17
Вроде есть JIT на основе LLVM, Julia даже на нем работает, но годится ли он для чего-то кроме Julia, я не знаю.

Kirill
18.07.2018
07:34:16
Не знаю, на сколько все это работает. Сам никогда не пробовал и с нативным софтом стараюсь связываться по-минимуму. У меня друг этим занимался и он уверял, что одних ключей не хватает, должны быть директивы компилятора внутри кода.
Если говорить про gcc, то он не только инлайнить умеет, там есть раскручивание циклов, удаление мёртвых бранчей, векторизация математики, всякие хаки по алайну памяти, специализации, так что он достаточно умный