@kotlin_lang

Страница 575 из 982
You
07.03.2018
09:24:04
Jakarta EE, попрошу извинить

Anatoly
07.03.2018
09:27:47
@jvmchat
спасибо большое!

Jakarta EE, попрошу извинить
сорри, исправлюсь :)

Google
Владимир
07.03.2018
11:20:08
Эх, либо я опять в глаза долблюсь, либо этот нюанс в документации несколько опущен
Kotlin property - это, по сути, поле с аксессорами, у тебя нет гарантий, что между двумя обращениями к полю не произойдёт изменение backing field, например из другого потока, отсюда и проблема. Мы обычно оборачиваем в какой-нибудь mutableField?. also()

Тогда в also у тебя гарантированно захваченная nonnull переменная

Mikhail
07.03.2018
11:22:22
Type Checks and Casts: 'is' and 'as' - Kotlin Programming Language https://kotlinlang.org/docs/reference/typecasts.html#smart-casts

Ivan
07.03.2018
11:22:25
Ребят, а никто с сиквенсами на корутинах не баловался? У меня 2 вопроса: 1) он может быть конечным? Или по определению бесконечен? 2) если берёшь следующее значение несколькими потоками одновременно, то там внутри всё-равно же начинается concurrency и нужно корректно синхронизировать весь алгоритм получения следующего значения

Ivan
07.03.2018
11:24:33
И в целом, есть какие-нибудь бест практисы на тему ленивого форк джоина? Или я о чём-то странном мечтаю?

Ivan
07.03.2018
11:28:09
что вы понимаете под "безконечен"? Он по сути ленив.
Ну во всех примерах там в основном фибоначи и "дай первые 10", а у меня задача, ну допустим рюкзак через динамическое программирование, там конечное число вариантов

и я хочу сделать forEach

Я тут только что подумал, типа можно просто на некоторой итерации не делать yeld... ?

Лёша
07.03.2018
11:30:37
я так понимаю, он будет бесконечен до тех пор, пока есть кому принимать значение)

Ivan
07.03.2018
11:32:26
я так понимаю, он будет бесконечен до тех пор, пока есть кому принимать значение)
Ну вот и я так тоже понимаю на данный момент, но не всегда же пользователь знает сколько нужно

Google
Ivan
07.03.2018
11:33:40
Я тут только что подумал, типа можно просто на некоторой итерации не делать yeld... ?
Блин, вообще вот это просто нужно будет попробовать... спасибо! =)

Сорян за использование чатика как уточку )

Хотя второй вопрос остался (про синхронизацию)

Mikhail
07.03.2018
11:36:08
Сорян за использование чатика как уточку )
Ниче, тут все равно запрещают про дарт флудить, ты хоть по теме

Лёша
07.03.2018
11:38:20
Я тут только что подумал, типа можно просто на некоторой итерации не делать yeld... ?
судя по примеру, вариант вполне подходящий https://github.com/Kotlin/kotlin-coroutines/blob/master/examples/sequence/sequenceOfLines.kt

Ivan
07.03.2018
11:42:07
ладно бы канал
А разница?

А, не, я знаю разницу, с каналом не получится лениво

Dmitry
07.03.2018
11:54:30
A sequence that returns values through its iterator. итератор не всегда потокобезопасен

про каналы и "лениво" fun main(args: Array<String>) { val c = Channel<String>() launch { c.send("hello world") c.close() } runBlocking { for (msg in c) { println(msg) } } }

Andrew
07.03.2018
12:01:49
https://github.com/Kotlin/kotlinx.coroutines/issues/254

Роман объясняет, почему целиком лениво не получается.

Ivan
07.03.2018
12:50:24
о, большое спасибо, буду смотреть!

A sequence that returns values through its iterator. итератор не всегда потокобезопасен
тут да, согласен. даже в подавляющем числе случаев потокоНЕбезопасен

Aleksandr
07.03.2018
15:29:58
ребят, подскажите плиз

нежно люблю типизированные языки, а котлин вообще ня

Google
Aleksandr
07.03.2018
15:30:36
можно ли его сейчас применять на фронте?

Nameless
07.03.2018
15:30:54
надо у дедов спросить

(почему нет? что такое фронт?)

Aleksandr
07.03.2018
15:31:20
frontend

Sergey
07.03.2018
15:31:21
Nameless
07.03.2018
15:31:33
frontend
в браузере или на сервере?

Sergey
07.03.2018
15:31:40
но если хочешь норм саппорта, то тебе в слак, там есть отдельная комната для него

Aleksandr
07.03.2018
15:31:49
браузер

Nameless
07.03.2018
15:31:53
в браузере kotlin.js, на сервере kotlin.jvm

Alexey
07.03.2018
15:33:22
Ох уж эти влажные мечты

Sergey
07.03.2018
15:33:47
по поводу?

Alexey
07.03.2018
15:34:08
По поводу переиспользования кода на беке и фронте

Sergey
07.03.2018
15:34:13
у нас фронтэнды уже посматривают на котлин

ну не всего кода же

а DTO как минимум

Alexey
07.03.2018
15:34:24
Пока что, все кто это делает, страдают, имхо

Sergey
07.03.2018
15:34:45
один раз описали обьекты апишки, и юзаешь и там и там

Nick Senchurin
07.03.2018
15:35:40
Aleksandr
07.03.2018
15:36:00
я не столько хочу переиспользовать, сколько иметь приличное ооп

Sergey
07.03.2018
15:36:11
почему не TS?

Google
Aleksandr
07.03.2018
15:36:35
как по мне, ts очень своеобразное решение

вообще с типизацией, на мой взгляд, в js скорее нерешаемая проблема

вот есть либа, например, moment.js. для того, чтобы с ней удобно работать в рамкахх ооп - надо подгрузить файл описания типов

Sergey
07.03.2018
15:39:23
если у тебя там jquery и прочая хрень - тогда это бесполезно

а если реактовый SPA, то они даже в обычном жсе описывают типы для стейта

Aleksandr
07.03.2018
15:41:28
вот да. хорошо, есть DefinitelyTyped - но проблема в том, что не факт, что файл описания типов актуален

Admin
ERROR: S client not available

Sergey
07.03.2018
15:41:54
мне вот что не нравится, это то что нужно кучу биндингов писать

на любую либу подключенную

но я еще не игрался с kotlin/js, так что хз даже, может это не большая проблема

Aleksandr
07.03.2018
15:42:55
соотв, нужно ожидать, рассматривать и обновлять пару "библиотек" вместо одной. или хакать без типов, если в либе ценная правка бага или еще что-то, и надо необходимо обновить

а если на либу нет файла типов - можно пробовать или генерить самому, что отдельный квест, или работать "из-под обычного js"

чудеса с цепочкой запросов - отдельная жуть; слава партии за async/await

Sergey
07.03.2018
15:46:50
есть же корутины

Aleksandr
07.03.2018
15:47:55
но основная проблема в том, что крайне много библиотек в принципе построены на функциональной архитектуре, и работать с ними с точки зрения ооп еще одно неблагодарное дело - лаконичные вызовы в примерах не так-то просто оборачивать и преобразовывать в ооп-образное решение

ну и разумеется, что ts надо пересобирать под js и включать поддержку дебага, что еще одна невеликая, но раздражающая прослойка работ

естественно и прискорбно, что эти проблемы я ожидаю увидеть и в колтине под js

Жабра
07.03.2018
16:33:59
Подскажите, пожалуйста: есть вот такой код Socket(contact.currentIp, contact.currentPort).use { socket -> BufferedWriter(OutputStreamWriter(socket.getOutputStream())).use { out -> out.write(message) out.flush() BufferedReader(InputStreamReader(socket.getInputStream())).use { inp -> serverResponse = inp.readLine() } } } В прошлом проекте я использовал этот код, и отправка-приём сообщений происходили нормально. Сейчас же, сервер получает сообщение только есть убрать BufferedReader, в противном случае он видит что соединение произошло, но висит и ждёт сообщение.

Почему так может происходить? Убрал reader - сервер получает сообщение.

Google
Жабра
07.03.2018
17:06:35
Всё, нашёл решение. Надо было out.write("$message\r")

Чтобы указать что на этом всё

Pavel
07.03.2018
18:36:11
Под windows это? А под Unix заработает "\r"?

Лучше после out.flush() закрыть } чтобы use закрыл стрим

Жабра
07.03.2018
19:02:43
Pavel
07.03.2018
19:25:37
Просто как правило использование вот так в тупую \r может приводить к весьма странным последствиям на разных платформах. Ибо это carrige return а не \n. Просто readLine() принимает любой символ конца строки Можно \r заменить на out.newLine()

Ivan
07.03.2018
20:22:49
https://github.com/Kotlin/kotlinx.coroutines/issues/254
Ага, итересно, получается в канале всегда есть новое значение и если мы получим его, то тут же пойдёт вычисление следующего

https://github.com/Kotlin/kotlinx.coroutines/issues/254
Но я так понимаю с sequence такой такой проблемы нет

Andrew
07.03.2018
20:37:01
Но я так понимаю с sequence такой такой проблемы нет
Sequence точно так же остановится после вычисления первого значения на yield, как и producer на send(). В этом контексте они, по-моему, равнозначны.

Roman
07.03.2018
21:17:26
Не равнозначны.

Sergey
07.03.2018
21:21:40
@fogone вспоминая https://gist.github.com/fogone/e940de35f755c13299a65733c4b3be59#file-github-kt-L60 почему для параллельного map не сделать produce(context, capacity = parallel) { (0 until parallel).map { launch(context) { consumeEach { send(transform(it)) } } }.forEach { it.join() } } ?

Ivan
07.03.2018
21:50:45
Не равнозначны.
Роман пришёл и всех заинтриговал ) Я так понимаю неравнозначность будет в том что если у сиквенса запросить 10 значений он вычислит 10 и всё, а канал пойдёт вычислять 11 значение и затупит только на отсылке этого 11го, если не будет консьюмера

Ivan
07.03.2018
21:58:57
только что проверял, так и есть
Круто, спасибо большое

Alex
07.03.2018
22:49:45
Просто как правило использование вот так в тупую \r может приводить к весьма странным последствиям на разных платформах. Ибо это carrige return а не \n. Просто readLine() принимает любой символ конца строки Можно \r заменить на out.newLine()
у тебя iOS? везунчик, как я помню разделитель строки. \n Win, \r\n Nix, \r iOS при этом и на на многоих никсах, на винде 100%, и под iOS \n работала. Если такая проблемма, могу посоветовать подход из пхп EOL - который по сути берет систему, и от нее ставит разделитель, думаю можно через System прописать

и да, не забудь, если ты в exec(ляляля) влазишь, там может быть сложнее, пример, при подключении к COM порту прописании AT команд в модем, разделитель, это новая комманда, для отправки аргуменда нужно зажействовать Alt+Z

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