
Andre
21.10.2016
00:35:07
всем по офферу

Eugene
21.10.2016
00:35:14
Кстати, судя по упоминанию трейтов кто-то тут знаком со скалой? :)

Vitaliy
21.10.2016
00:35:14
Это же с дивана вставать надо ещё

Andre
21.10.2016
00:35:17
@bvitaliyg оффер

Google

Vitaliy
21.10.2016
00:35:29
Ну тут да, много кто

Andre
21.10.2016
00:35:31
Dmitriy оффер
и мне оффер
всем по офферу

Vitaliy
21.10.2016
00:35:42
Я на ней не писал, просто встречал трейты как сущности в ООП

Eugene
21.10.2016
00:35:52
@andremacareno Мы поняли, можешь не продолжать :)

Andre
21.10.2016
00:36:10
я и не собирался :D

Eugene
21.10.2016
00:37:51
Интересно было бы пообщаться с кем-нибудь, кто запилил в продакшен что-нибудь на Scala под андроид)

Vitaliy
21.10.2016
00:38:31
Вроде бы в году так 2013-м ею многие увлекались
И писали, особенно на аутсорсе
Даже в глубинках, в Ростове точно

Eugene
21.10.2016
00:38:59
Просто интересно, а стоит ли оно вообще того?)

Dmitriy
21.10.2016
00:39:14
https://youtu.be/MYaoSELIC_U

Andre
21.10.2016
00:39:14
оно ж всё в один байткод компилируется

Google

Vitaliy
21.10.2016
00:39:25

Andre
21.10.2016
00:39:26
но зато там есть из коробки акторы

Eugene
21.10.2016
00:39:28
Да это-то понятно)

Vitaliy
21.10.2016
00:39:40
Множество команд одно и то же, а сами команды разные

Andre
21.10.2016
00:39:54
мозг сломался на этой фразе

Vitaliy
21.10.2016
00:40:00
Обычно все жаловались на то, что из-за скалы и её stdlib сразу количество методов зашкаливает
мозг сломался на этой фразе
В Котлине есть nullable types.
fun test(a: A) {
System.out.println(a);
}
Как ты думаешь, какой код сгенерирует Котлин?

Dmitriy
21.10.2016
00:41:35

Vitaliy
21.10.2016
00:41:40
Он сгенерирует примерно такое:
void test(A a) {
Utils.checkNotNull(a, "a");
System.out.println(a);
}
Ага
Причем, Котлин ещё относительно быстрый язык

Eugene
21.10.2016
00:42:03
Я думаю, речь шла о том, что все скомпилится в 100% JVM-совместимый байткод

Vitaliy
21.10.2016
00:42:14
Там даже инлайн лямбд из соображений производительности сделали

Andre
21.10.2016
00:42:16

Eugene
21.10.2016
00:42:35
Собственно, на jpoint слушал доклад чувака из jetbrains, где он подробно все разжевал
Как тот или иной синтаксический сахар котлина выглядит при декомпиляции обратно в java-код

Andre
21.10.2016
00:43:03
и типа смысл получается такой же, как и от библиотек - стало удобнее, но добавился оверхед?

Eugene
21.10.2016
00:43:17
Он там бенчмарки показывал, по итогу - да
Стало намного удобнее, но есть оверхед
В подавляющем большинстве случаем весьма незначительный

Google

Vitaliy
21.10.2016
00:43:42
Именно так
Причем у них, повторюсь, не сильно большой ешё оверхэд

Andre
21.10.2016
00:43:56
ну, процессоры нынче такие, что его никто не заметит, скорее всего

Vitaliy
21.10.2016
00:44:02
Лол
Заметит

Eugene
21.10.2016
00:44:12
И да, инлайн лямбд - по-моему это единственная фича, из-за которой котлин может выиграть у джавы

Vitaliy
21.10.2016
00:44:24
Попадет такой код в onDraw() — и будет тебе веселье

Eugene
21.10.2016
00:44:33
Во всех остальных бенчмарках было либо полное равенство, либо небольшая просадка у котлина)

Vitaliy
21.10.2016
00:44:38
Другого я пока не видел

Andre
21.10.2016
00:44:41

Vitaliy
21.10.2016
00:45:10
А ты так часто думаешь, что они не порождаются?
drawableList.forEach { it.draw(c) }

Eugene
21.10.2016
00:45:19
А учитывая, что Scala дает намного больше возможностей, чем котлин, мне вдвойне интересно как ее код распепячивается обратно в джаву))

Andre
21.10.2016
00:45:31
я просто котлин/скалу/кложур/етц не смотрел :)

Eugene
21.10.2016
00:46:05
А так, конечно, на скале писать в андроиде - это от лукавого
Пусть лучше котлин развивают)

Andre
21.10.2016
00:46:55
я вот хочу научиться по максимуму в натив запихивать

Vitaliy
21.10.2016
00:47:06
Зря хочешь
Нативный вызов это тоже оверхэд
Нельзя их по каждому чиху делать

Google

Eugene
21.10.2016
00:47:45
А это из технических соображений, или из соображений т.н. job security? :)

Andre
21.10.2016
00:48:40
спортивный интерес

Eugene
21.10.2016
00:48:57
Понятно)

Vitaliy
21.10.2016
00:49:00
Вообще, по поводу натива

Andre
21.10.2016
00:49:09
ну раз уж речь об оверхеде пошла: да, это я понимаю - ну так давайте смотреть, в каких ситуациях он плох

Vitaliy
21.10.2016
00:49:22
Я недавно ради интереса взял один из самых быстрых нативных парсеров и написал к нему обертку в jni

Andre
21.10.2016
00:49:33
я уж не говорю о том, что часть вещей в Android SDK и JDK сами их используют

Vitaliy
21.10.2016
00:49:36
Интерфейсно такую же, как в org.json
Разница в 8-9 раз

Andre
21.10.2016
00:50:37
если мы работаем в нативе, у нас же еще GC спит, так ведь?

Admin
ERROR: S client not available

Vitaliy
21.10.2016
00:50:50
+ оно не держит все древо в куче
Но в самом нативе его нет, да

Andre
21.10.2016
00:51:23
в любом случае, объектов собирать-то меньше

Vitaliy
21.10.2016
00:51:55
Ага

Eugene
21.10.2016
00:53:30
Вообще, кстати, приходилось слышать, что иногда джавовский код ухитряется работать быстрее нативного за счет JIT

Andre
21.10.2016
00:53:37
В таком случае, получается, что в натив имеет смысл выносить то, что:
1) будет использоваться где-то ещё (то есть с целью кроссплатформенности)
2) порождает в яве миллион объектов при своей работе, хотя нужен, допустим, всего один какой-то
еще варианты есть?

Eugene
21.10.2016
00:54:36
Может, если нужно кэшировать что-нибудь тяжелое за пределами JVM-heap

Vitaliy
21.10.2016
00:54:56
1) с кросслпатформенностью у натива, наоборот, все хуже.
2) да, но это частный случай.

Google

Andre
21.10.2016
00:54:57
а, ну и еще забыл третий пример, навеянный кодом телеграма
когда нужно бэкпортировать иммутабельные битмапы или какие-то кодеки на старые версии андроида

Vitaliy
21.10.2016
00:55:15
Главный смысл — делать тяжелую работу, которую нельзя делать в джаве
Например, кодеки

Eugene
21.10.2016
00:55:21
Помнится, какая-то из попсовых либ для работы с картинками (fresco, кажется) такими делами грешила

Vitaliy
21.10.2016
00:55:24
Или сильное шифрование
Никаких GC_FOR_ALLOC на 4.X

Andre
21.10.2016
00:56:10

Vitaliy
21.10.2016
00:56:26
Типа айоса?

Andre
21.10.2016
00:56:29
например

Vitaliy
21.10.2016
00:56:45
Тогда да, но обертку для jni все равно будешь сам писать

Andre
21.10.2016
00:57:02
ну это понятно, надо же как-то в интерфейс прокидывать всё равно

Eugene
21.10.2016
00:57:33
Немного оффтоп, но помню однажды видел в одном iOS-проекте часть кода, для работы с крипто про
Это адище работало на голых сях и вызывало методы WinAPI
Уж не знаю как, но извращенцы из криптопро протащили винапишные либы на iOS
К слову о кросплатформенности :)

Andre
21.10.2016
01:00:04
забавный пример :)
я, конечно, не то имел в виду - просто, допустим, пишешь с stdlib и какими-то еще кроссплатформенными библиотеками, и приложение на какой-то десктопной ОС напрямую с этим работает, для андроида еще дописываешь враппер - и готово
Никаких GC_FOR_ALLOC на 4.X
вот, кстати, по этому поводу уточню, раз уж упомянули
речь ведь идет о переиспользовании Bitmap'ов за счет киткатовских библиотек?

Eugene
21.10.2016
01:02:29
Я вот об этом говорил http://frescolib.org/docs/caching.html
Первый пункт. Они до 5-ого андроида битмапки кэшировали во внешней куче

Andre
21.10.2016
01:17:00
к знатокам Camera API, пока что легаси:
есть переключение между фото и видео, если я правильно понимаю, за это время должно произойти следующее:
1) останавливаем превью
2) пересчитываем размеры превью
3) снова показываем превью
так вот: всё убрано в фоновые потоки, но всё равно есть заметный пролаг в 200 мс, есть мысли, как его убрать?

Gregory
21.10.2016
01:18:30
важно open вызывать с фонового потока, и не просто фонового, а с хэндлером, насколько помню
у меня конкурсное вроде не лагало