
Руслан
29.09.2017
19:07:29
И видео исходиник для пояснения
https://www.youtube.com/watch?v=C6b_dFtujKoa

Peter
29.09.2017
19:09:56
Спасибо

Руслан
29.09.2017
19:12:57
Чет в этом году не вижу котлина на джокере (https://jokerconf.com/#schedule), не зря не покупал билеты :D

Igor
29.09.2017
19:29:52
А казалось бы СПб. Вместо него будет цейлон, скала и груви (и главное пазлеры новые, а ха ха ну наконец то).
Надо было тебе спикером записываться ?

Google

Rikland
29.09.2017
19:36:03

Quantum Harmonizer
29.09.2017
19:39:00

Peter
29.09.2017
19:49:16
Статья, которую я кидал говорит One of the intents of the Java Memory Model is to allow reorderings for ordinary reads и ссылается на то, что null может возникнуть из-за именно такого реордеринга ридов. Но в однопоточном коде мы не наблюдаем null никогда -> значит такой оптимизации для него не делается -> набор оптимизаций для однопоточного кода и многопоточного кода различен.
Где я ошибаюсь?

balolam
29.09.2017
19:53:26
Народ, Room под Android кто-то с data классами дружил?

Sergey
29.09.2017
19:53:48
или поломалось?

balolam
29.09.2017
19:55:25
Просит пустой публичный конструктор
https://github.com/googlesamples/android-architecture-components/blob/master/PagingSample/app/src/main/java/paging/android/example/com/pagingsample/Cheese.kt
Т.е. это не работает
(Без костыля с пустым вторым конструктором)

Руслан
29.09.2017
20:10:36
Null будет же не в двух потоках, а в одном из или во всех кроме одного.

Peter
29.09.2017
20:14:38
Да, я понял, что у меня пробелы с базовыми понятиями.
Я привык, что гонка - это считанный мусор или записанный мусор.
Смотреть и гуглить. Ещё раз спасибо.

Google

Badya
29.09.2017
20:28:04

Диёр
29.09.2017
20:34:51
Давно пора поменять аватарку чата

Konstantin
30.09.2017
00:09:54
всем привет) коль зашла речь про rx, а у вас ide нормально подсказывает какие анонимные классы вставить? как это например с джавой работает


Ivan
30.09.2017
04:10:32
Я опоздал на обсуждение jmm(
Я тут на днях читал статью Шипилёва про safe publications и встретил пример, который сломал мою голову.
public class UnsafeDCLFactory {
private Singleton instance;
public Singleton get() {
if (instance == null) { // read 1, check 1
synchronized (this) {
if (instance == null) { // read 2, check 2
instance = new Singleton();
}
}
}
return instance; // read 3
}
}
Он заявляет, что инструкции read вне synchronized блока jvm может переставлять как хочет, что может привести к возвращению null из метода get().
Ситуация абсолютно не укладывается в голове, но вопрос возникает предельно абстрактный, типа "Как теперь жить?".
Если вдуматься, то может кто видел объяснения на пальцах "на что нельзя расчитывать в многопоточном Java коде?", желательно с пояснениями почему. Ну или объяснения когда такой реордеринг может произойти, и что ещё jvm нам готовит?
Чёёёрт, я тоже опаздал на обсуждение jmm... (
Про близкие контакты jmm - очень правильный совет посмотреть! Вообще Алексей - негодяй, это видео должно было появиться самым первым, а не вот эти все разговоры про барьеры и всё такое
Тогда идём дальше. Переставляет, ок.
Но получается в случае многопоточного кода у перестановок меньше ограничений.
На самом деле, как я для себя решил тот диссонанс, что и у Вас (у меня был ровно такой же=) ): не нужно думать о перестановках, кэшах, барьерах и всё такое, нужно подходить к jmm достаточно формально, т.е если нет такого маршрута из цепочки hb, то лучше считать что там может лежать что угодно из ранее записанного. Для вашего случая если переменная не volatile , то единственное что туда точно записали - это null. А думать как так получилось что мы его прочитали после какой-нибудь записи - это из серии "не читайте перед обедом советских газет", потому что даже если сейчас найти почему это так (или почему так не может быть) то для следующего апдейта jvm это может стать не валидно.
Я так понял это была основная идея доклада
Может быть @relizarov нам может немного подробнее рассказать как применять jmm к котлину и как доказывать что программа корректная и не содержит гонок. Есть ли какие-то подводные камни?


Peter
30.09.2017
08:52:25
Да, хотелось полезть пониже, на что в начале доклада было сказано - это могила. Я понял, что "перестановкой ридов" занимается на jvm, а как-раз абстрактная машина, описываемая jmm - вот моя главная ошибка.
А там человек из зала спросил про "А в реальности там может быть null?". Спасибо ему за это.
Шипилёв сказал, что возможно на хардваре без когеретности (которого сейчас он не знает), и быстро упомянул теоритическую оптимизацию компилятора.
Про оптимизацию слишком бегло, я опять остался с вопросом "а как после такой оптимизации живёт однопоточный код?"

Quantum Harmonizer
30.09.2017
09:14:22

Roman
30.09.2017
09:29:14
+1

Руслан
30.09.2017
09:54:30
Интересно, Kotlin/Native придется поддерживать такие же инварианты как для Kotlin/JVM, т.е. тут как мне кажется действительно много работы

Eugeny
30.09.2017
10:01:51

Quantum Harmonizer
30.09.2017
10:02:15

Sergey
30.09.2017
10:15:35
все, последний проект на джаве только что перевели на котлин. теперь джавы не осталось

Евгений
30.09.2017
10:21:13
ну как не осталось ... просто Вы её не видите)

Sergey
30.09.2017
10:24:24
ну только в зависимостях
наш код на котлине)

Anton
30.09.2017
10:25:02
и что лучше жить стало после выпила джавы?

Sergey
30.09.2017
10:25:17
мм, ну приятнее работать стало как минимум

Google

Quantum Harmonizer
30.09.2017
10:33:14
кто-нибудь тут пользовался kwery? :)

Aliaksei
30.09.2017
10:51:37
Что то не понял как модель соберёт если у тебя допустим class Z(val a: A, val b: B) где A и B разные таблицы

Quantum Harmonizer
30.09.2017
10:52:19

Aliaksei
30.09.2017
10:52:54
да и sql строками?
А ну там есть пример с Фильмами и актёрами
И выходит что нужно делать за каждой сущностью отдельный запросы, когда можно сделать join и замапить ответ. Не годно

Quantum Harmonizer
30.09.2017
11:28:12

Aliaksei
30.09.2017
12:12:14
Вот есть jooq я что то не понимаю какую задачу реашет тут kwery
Я понимаю, что идут от обратного, с модели к базе, это классно, но получается тогда ORM

Igor
30.09.2017
13:41:14
В моей голове это не укладывается.
UPD: доперло, кривые прекривые типы монги T_T

Quantum Harmonizer
30.09.2017
13:45:08

Руслан
30.09.2017
14:44:33
https://youtu.be/GlvyHIqT3K4?t=8m49s смешно как Джош пытается писать на котлине, очевидно не понимая что он делает
Вот такие они, девелопер адвокаты

Vic
30.09.2017
14:46:55

Mi
30.09.2017
14:49:05

Aliaksei
30.09.2017
22:01:55

Rikland
30.09.2017
22:24:32

Google

Anton
01.10.2017
06:48:16

Konstantin
01.10.2017
07:28:09
всем привет, в java когда используешь rxjava Observable.fromCallable и там можно было создать объект и вернуть его, а в котлине, это должна быть всего одна строчка?
return нельзя использовать, тоесть если нужно создать объект какой то сложный, то лучше его создать в методе, а в Observable.fromCallable использовать этот метод?

Dmitry
01.10.2017
07:48:38
Для сложных объектов есть apply

Pam
01.10.2017
07:52:21
Всем привет. подскажите плиз что нибудь простое для бинарной сериализации. желательно с интерфейсом вида "encoded = encode(data) ➔ data = decode(encoded)"