
Stas
09.09.2016
21:30:54
Огонь

Andrey
09.09.2016
21:31:00
тут, говорят, весело у вас

Stas
09.09.2016
21:31:09
очень

Grigoriy
09.09.2016
21:31:09
вообще огонь, располагайся

Google

Stas
09.09.2016
21:31:23
хипстеры против олдскульщиков

Vitaliy
09.09.2016
21:31:35
Весь чат против Гриши

Alexey
09.09.2016
21:31:36

Vitaliy
09.09.2016
21:31:42
Гриша пока что всухую ведет

Yan
09.09.2016
21:31:47
Насчёт reified generics: если очень кратко – то для того, чтобы писать getComponent<MyComponent> вместо getComponent(MyComponent::class.java). А ещё дженерики, в отличие от параметров, могут инфириться, поэтому <...> вообще иногда можно не писать

Andrey
09.09.2016
21:32:17
гриша красавчик, вы че. активити пересоздавать тупейшая вещь

Vitaliy
09.09.2016
21:32:56
Там ещё и оверхэд есть

Alexey
09.09.2016
21:32:57

Andrey
09.09.2016
21:33:19
можно про это книгу писать как придумать себе проблему и потом героически ее решать ретеинфрагментами

Roman
09.09.2016
21:33:43

Stas
09.09.2016
21:34:01

Alexey
09.09.2016
21:34:10
А обрабатывать все возможные смены конфига утомительно.

Vitaliy
09.09.2016
21:34:23
Мы обсуждали, есть, небольшой. Ян считает, что это экономия на спичках

Google

Vitaliy
09.09.2016
21:34:34
И да, местами Котлин быстрее джавы

Roman
09.09.2016
21:34:51

Stas
09.09.2016
21:35:25
если функция принемает объект, то можно сгенерить такую-же функцию, но условно нулевым параметром передавать Class

Roman
09.09.2016
21:36:07

Yan
09.09.2016
21:36:52
Оверхед, про который говорит @bvitaliyg, заключается в том, что мы в некоторые места вставляем ассёршны для того, чтобы проверить, не вернулось ли из Java нам null-значение туда, где должен быть non-null. Часть таких ассёршнов отключается, часть нет. С моей точки зрения, вред от этого минимален, @bvitaliyg так и смог представить мне никаких доказательств того, что код становится медленее на сколько-нибудь ощутимую величину :) Зато в стектрейсах становятся гораздо более осмысленными

Stas
09.09.2016
21:37:28
к reified... Мне бывает удобно when(T::class) писать

Vitaliy
09.09.2016
21:37:53
Плюс у вас ещё везде итераторы в stdlib

Roman
09.09.2016
21:37:54
Оверхед, про который говорит @bvitaliyg, заключается в том, что мы в некоторые места вставляем ассёршны для того, чтобы проверить, не вернулось ли из Java нам null-значение туда, где должен быть non-null. Часть таких ассёршнов отключается, часть нет. С моей точки зрения, вред от этого минимален, @bvitaliyg так и смог представить мне никаких доказательств того, что код становится медленее на сколько-нибудь ощутимую величину :) Зато в стектрейсах становятся гораздо более осмысленными
ок, спасибо )

Yan
09.09.2016
21:38:03
Если говорить про андроид, то с какой-то там махровой версии вроде 2.3 dalvik умеет инлайнить простые методы, которые мы вызываем для чеков

Vitaliy
09.09.2016
21:38:33
Оверхед, про который говорит @bvitaliyg, заключается в том, что мы в некоторые места вставляем ассёршны для того, чтобы проверить, не вернулось ли из Java нам null-значение туда, где должен быть non-null. Часть таких ассёршнов отключается, часть нет. С моей точки зрения, вред от этого минимален, @bvitaliyg так и смог представить мне никаких доказательств того, что код становится медленее на сколько-нибудь ощутимую величину :) Зато в стектрейсах становятся гораздо более осмысленными
А как ты предлагаешь проверять частоту вызова GC и время его работы?

Yan
09.09.2016
21:38:47
А причём тут GC вообще?

Roman
09.09.2016
21:38:52

Yan
09.09.2016
21:39:21
Про inline-функции - там всё просто, не создаётся отдельного фрейма в стеке вызовов функций. А если в inline-функцию передаётся лямбда, то объект для лямбды не создаётся, а её код инлайнится туда же, куда и сама функция

Vitaliy
09.09.2016
21:39:31
Ну это все таки не самый точный инструмент для тестов

Roman
09.09.2016
21:39:57

Vitaliy
09.09.2016
21:40:09
Ну можно так посмотреть

Stas
09.09.2016
21:40:20

Yan
09.09.2016
21:40:58
Э-э, собственно, ничего не мешало, это нормальный режим работы jvm

Stas
09.09.2016
21:41:00
Если про память говорить, мне кажется куда больше оверхеда в коллекциях, которые юзаются в ядре и всяких support library

Vitaliy
09.09.2016
21:41:18
А причём тут GC вообще?
Итераторы + мне интересно самому посмотреть, что там будет с константными обьектами строк на реальной вм

Google

Stas
09.09.2016
21:42:21

Yan
09.09.2016
21:42:25
На самом деле, в некоторых планах относительной дальности есть поддержка InlineOnly-функций (точнее, поддержка уже есть, пользы пока нет). Суть в том, что если все usages функции заинлайнены, то эта функция в jar просто не нужна. Этим можно сэкономить количество методов в APK
Потому что как иначе передать функции типовой параметр?

Stas
09.09.2016
21:43:28
в скале это как-то решили?

Yan
09.09.2016
21:43:57
Насколько я понимаю, решили очень не до конца

Sergey
09.09.2016
21:45:26
А скоро релиз котлин 1.1?)

Yan
09.09.2016
21:45:37
И их нельзя нормально поддержать без ощутимого overhead в рантайме, поэтому они у нас доступны только в inline-функциях, где тип явно известен

Gregory
09.09.2016
21:45:43
просто второй более тихий

Grigoriy
09.09.2016
21:45:50
✊

Yan
09.09.2016
21:45:59
В этом году - маловероятно. Но feature freeze будет уже относительно скоро

Stas
09.09.2016
21:46:31
делать из T => Unit функцию Class<T> => T=> Unit, когда это возможно.

Stas
09.09.2016
21:48:01
когда аргумент именно передается...

Sergey
09.09.2016
21:48:22

Yan
09.09.2016
21:48:47
Да, их можно добавлять незаметно от пользователя в список параметров функции. Пока этого нет
В каком-то виде обязательно будут

Stas
09.09.2016
21:51:12
inline fun <reified T> f(t: T) {
helperF(t)
}
fun <T> helperF(t: T, slazz: KClass<*> = t::class) {
}

Gregory
09.09.2016
21:52:03
inline fun лол
в вашем котлине слишком много всего смешного

Stas
09.09.2016
21:52:42
в этом чате тоже)

Google

Andrey
09.09.2016
22:00:59

Roman
09.09.2016
22:02:31

Andrey
09.09.2016
22:03:52
гриша, а как у вас в вк состояние скролла в новостях сохраняется?

Grigoriy
09.09.2016
22:04:42
лучше так, наверное. @grishka

Gregory
09.09.2016
22:04:52

Andrey
09.09.2016
22:06:41
ну как юзер могу посудить, что для большинства кейсов этого хватает) правда давно на девайсах с маленькой оперативкой не сидел. а сам пишу с сохранением в сейвединстансстейт и тещу с dont keep activities

Gregory
09.09.2016
22:07:27
там сохранение позиции прокрутки делали немного для другого — чтобы можно было сходить в другие разделы, вернуться в новости и не оказаться сверху ленты и без всего подгруженного

Roman
09.09.2016
22:08:28

Andrey
09.09.2016
22:08:28
и вьюшки все реально пересоздаются, просто восстанавливается скролл?

Gregory
09.09.2016
22:09:02

Admin
ERROR: S client not available

Andrey
09.09.2016
22:09:16
ну у вк реальная проблема, то что ты постоянно между новостями и сообщениями можешь переключаться

Gregory
09.09.2016
22:09:19
при выходе из раздела все его вьюшки продалбываются
сообщения тоже лежат в статике (и в sqlite)
лента лежит в sqlite, но только для того, чтобы после запуска процесса с нуля не приветствовать пользователя прогрессбаром

Andrey
09.09.2016
22:10:49
да, обычная тактика с меморикешем и дб кешем, это круто все

Gregory
09.09.2016
22:11:46
и для ленты там лежит только первый кусок подгрузки (20, что ли, постов) + инфа, чтобы грузить дальше

Andrey
09.09.2016
22:13:59
а для непересоздания при повороте. у меня как то был чуть разный лейаут для портрета и лендскейпа. и я не хотел пересоздавать активити. я даже написал вьюшку, которая из хмл брала не реальный размер из dimen в layout_width, а ссылку на ресурс в dimen, и в onMeasure брала актуальный getResources().getDimesionPixelSize() c этим ресайди. вот и гибкий лэйаут, и ничего не пересоздалось

Vitaliy
09.09.2016
22:17:39
+100 к уважению этому господину

Andrey
09.09.2016
22:18:31
(забыл пояснить что dimen в разных папках лежал разный, естественно)

Google

Stas
09.09.2016
22:20:14
Ради того, чтобы gc не нагружать?

Roman
09.09.2016
22:20:18

Vitaliy
09.09.2016
22:21:48
Инстанс убивается, результаты операции уходят в никуда

Roman
09.09.2016
22:22:24
"результаты операции уходят в никуда" это легко решается с MVP допустим. а что еще?

Vitaliy
09.09.2016
22:22:39
И если при выпиле системой это не так критично(ну загрузится заново), то при повороте напрягает

Andrey
09.09.2016
22:22:49
давайте просто подумаем, зачем появился механизм пересоздания активити по умолчанию. потому что есть некоторые места, в которых активити может жестко привязаться к конкретным значениям на основе текущей конфигурации. если не сделать самым безопасным путем люди начнут забывать что нужно сделать какие то дополнительные шаги чтобы все работало так, как ты ожидаешь.

Roman
09.09.2016
22:22:57
и второй вопрос к тем, кто считает что запрет на пересоздание активити это "плохо". чем плохо?

Vitaliy
09.09.2016
22:23:33

Grigoriy
09.09.2016
22:23:44

Andrey
09.09.2016
22:23:45
потом ты просто понимаешь как это работает, принимаешь правила игры, выключаешь поведение по умолчанию и изменяешь только те параметры, которые тебе нужны, а не пересоздаешь нафиг все
потому что на самом деле у тебя поменялась ширина и высота, а не ВСЕ

Stas
09.09.2016
22:24:44
Ну вроде как придумали кучу всего от лоадеров до разных RestApi Patern

Andrey
09.09.2016
22:25:46
потом ты экономишь время на том, что твои вьюшки уже заполнены нужными данными, не нужно опять в бд лезть, проскроленны туда, где и были
ну по той же логике еще можно активити пересоздавать каждую минуту, а то вдруг юзер делает приложение часы и он просто в onCreate в текствью проставляет текущее время
а то мало ли

Vitaliy
09.09.2016
22:26:48
Вот так нормальный программист и должен делать. Знать систему изнутри и правильно настраивать её, а не надстраивать

Roman
09.09.2016
22:27:31
Как именно решает? Именно сам МВП, а не либа
ну у тебя есть модель, которая просто кеширует данные результата работы асинхронной таски (в бд или в памяти), а потом ты после пересоздания снова ее берешь и берешь из нее теже данные

Stas
09.09.2016
22:27:45
Мне кажется, что это главная тема для дискуссий и создания велосипедов в android разработке.
Как хранить и возвращать результат в убитое активити

Vitaliy
09.09.2016
22:27:54
А, снова кэш
Ок, логично

Roman
09.09.2016
22:28:35
А, снова кэш
ну это в любом случае будет кеш. как ты это не назови. но реализовать его можно 100 и 1 способом )

Vitaliy
09.09.2016
22:28:41