@kotlin_lang

Страница 760 из 982
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 должны возвращать обзёрвабл другого типа, который уже нельзя подписать ни на какой шедулер.

(лева руля) мне был бы интересен, если это не слишком обременительно )
6. Нет read-only интерфейса для BehaviorSubject, нет возможности прочитать текущее значение из какого-нибудь subj.map { ... }.

Ну это всё минусы отдельной реализации и детали. А если нужна базовая асинхронщина, то какой бы прекрасной 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: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
Корутины — это языковая фича. kotlinx.coroutines — библиотека, построенная поверх этой фичи.
Без подключения библиотеки как ты будешь использовать их?

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
Без подключения библиотеки как ты будешь использовать их?
Добавляешь к сигнатуре функций ключевое слово suspend и все ?

Konstantine
17.07.2018
17:24:32
Добавляешь к сигнатуре функций ключевое слово suspend и все ?
В язык уже разве есть встроенные места, из коробки, где можно использовать суспенды? Мне казалось, что все лаунчи и пр. в библиотеке.

Google
Denko
17.07.2018
17:26:13
Добавляешь к сигнатуре функций ключевое слово suspend и все ?
И дальше студия пишет тебе что надо подключить карутины

Igor
17.07.2018
17:27:04
И дальше студия пишет тебе что надо подключить карутины
Да нет, вроде все компилируется. Могу даже асинхронный API заворачивать в корутины через suspendCoroutine который в стандартной библиотеке

Andrew
17.07.2018
17:41:58
В язык уже разве есть встроенные места, из коробки, где можно использовать суспенды? Мне казалось, что все лаунчи и пр. в библиотеке.
Вынесение всех вещей, которые можно реализовать в библиотеке, в библиотеку — это одна из основных фишек корутин. Которая, к примеру, помогает щас людям в удобном для них темпе корутины в 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
Да. Возмущение тут причем? Не путай:)
Я кстати долго пользовался корутинами на android без kotlinx, просто написав пару оберток повер asynctask

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

Точнее от C сложнее, от C++ почти невозможно.

Konstantine
17.07.2018
17:47:17
Я кстати долго пользовался корутинами на android без kotlinx, просто написав пару оберток повер asynctask
Я все равно не считаю, что это полноценный функционал из коробки, пока он эксперемениальный.

Хотя сейчас может там все не так страшно, не скажу

Антон
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
По сравнению с чем угодно крошечная, LogBack уже сравнимых размеров
kotlinx.coroutines меньше Protobuf nano меньше Gson меньше Okio + OkHttp + Retrofit меньше

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

Leonid
17.07.2018
18:27:07
пока вот такая конструкция вроде работает val p = window.fetch("https://jsonplaceholder.typicode.com/posts/1") p.then { resp -> resp.text().then { text -> setState { post = JSON.parse(text) } } } 2 промиса смущают
можешь попробовать вкрутить https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/runtime_usage.md#dynamic-object-parser-js-only , если уж у тебя там сразу dynamic

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

Bogdan
17.07.2018
18:32:45
Я все равно не считаю, что это полноценный функционал из коробки, пока он эксперемениальный.
странное заявление, язык должен иметь базовые вещи из которых ты делаешь большие, вот Си и С++, что они могуб без include ? Что может джс без своих фраемворков ? Корунтины вынесены в библиотеку что бы их можно было потом выпилить при случае, и не тащить как джава например, и имхо, корунтины не всегда нужны

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 с использованием натива будет есть меньше памяти и будет ли она шустрее?

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
А как по вашему тогда это делает JIT?
Только то что умеет. Если бы он умел все, тогда ты парням не пришлось писать jit под Эльбрус

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

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

Rikland
18.07.2018
07:18:52
Я это к тому, что JIT настолько же не умён как компиляторы, которые оптимизируют код под железо
Тут прикол в том, что на том же Эльбрусе vliw и там ему нужно быть достаточно умным. Чтоб генерировать нативный код иначе код будет малопроизводительный.

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

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

да и сам llvm по сути тоже jit
Ни разу. LLVM не может оптимизировать ничего на основе рантаймовой информации.

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

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

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

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

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