@kotlin_lang

Страница 88 из 982
Alexandr
30.03.2017
17:56:54
Ну инхаус RMR может на Котлин фигачить. А именно заказную.

Михаил
30.03.2017
17:56:57
Откуда инфа?
Они это вроде не скрывают

Руслан
30.03.2017
18:02:25
Пруф: https://habrahabr.ru/company/redmadrobot/blog/321458/

Sergey
30.03.2017
18:02:27
а заказчикам разве не пофиг на чем вы делать будете?

Google
Руслан
30.03.2017
18:02:50
@Enleur для заказчиков это вроде вообще первый пункт в тз

Sergey
30.03.2017
18:03:26
а вообще на главной котлина есть Who's using Kotlin и оттуда можно набрать имена компаний

Руслан
30.03.2017
18:04:00
Ну в том списке одни продуктовнеры же.

Sergey
30.03.2017
18:05:35
у нас тоже продуктовая...

Roman
30.03.2017
18:09:30
что можно сделать в ситуации, когда при компиляции андроид проекта получаю "Error:(1, 1) Some error(s) occurred while processing annotations. Please see the error messages above." и никаких сообщений выше нет. только название класса. но в нем вообще нет особых аннотаций, кроме JvmStatic?

скорее всего проблема в даггере, так как его граф менялся перед этим. но есть ли способ узнать в каком месте проблема?

Boris
30.03.2017
18:12:39
посмотрел код этих перфоманс-тестов, которые выше фигурировали, переписал на котлинвей, получилось что-то вроде такого, но работает и правда медленнее джавы, кто без профайлера скажет почему: fun calculateFF(signals: Array<Signal>, population: Array<Individual>, valueFactor: Int): Int { return population.sumBy { (lower, upper) -> signals.sumBy { (variables, value1) -> val passed = variables .allIndexed { index, value -> value in lower[index].. upper[index] } if (passed && valueFactor == 1) value1 else 0 } } } inline fun IntArray.allIndexed(predicate: (Int, Int) -> Boolean): Boolean = indices.all { predicate(it, get(it)) }у меня из вариантов только итераторы пока

Sergey
30.03.2017
18:14:26
lower[index].. upper[index] не?

или он прям умно оптимизирует это?

Boris
30.03.2017
18:19:06
не, это не влияет

Sergey
30.03.2017
18:19:24
https://github.com/JetBrains/kotlin/blob/1.1.0/core/builtins/src/kotlin/Ranges.kt#L54 хотя да, он умный

Boris
30.03.2017
18:31:17
ни у кого нет хороших мыслей? наверное стоит профайлер запустить всё-таки

Google
Boris
30.03.2017
18:32:54
аха

Igor
30.03.2017
18:34:14
Boris
30.03.2017
18:35:01
А он в java8 скомпилирован?
а что компилировать в Java8 разве есть какие-то профиты?

Ruslan
30.03.2017
18:35:42
компилятор другой

Boris
30.03.2017
18:35:59
лямбды через invoke-dynamic?
а это разве уже привернули?

компилятор другой
другой чем какой?

Ruslan
30.03.2017
18:36:24
лямбды через invoke-dynamic?
там одна лямбда же

Boris
30.03.2017
18:36:37
лямбды через invoke-dynamic?
да и нету там лямбды ниодной

Ruslan
30.03.2017
18:36:39
вообще пофиг

Boris
30.03.2017
18:37:14
кложур?
это чят про котлин вроде

Ruslan
30.03.2017
18:37:20
замыкание

не язык

Boris
30.03.2017
18:37:54
замыкание
нету там ниодно ни замыкания ни лямбды ни кложуры

Ruslan
30.03.2017
18:38:25
А что за абстракция тогда {(lower, apper) -> ?

А в java не через paraller-stream делается случаем ??
у джавы там пайп получается да

Boris
30.03.2017
18:39:10
Ruslan
30.03.2017
18:39:10
Но не уверен что в этом дело

Google
Boris
30.03.2017
18:39:22
Ruslan
30.03.2017
18:39:30
Я не котлиновод но у котлина тоже есть пайп-вей

не помню точно какой

это всё заинлайнено
это не отменяет абстракции

Boris
30.03.2017
18:40:13
Я не котлиновод но у котлина тоже есть пайп-вей
так вот я же написал настолько пайпно насколько смог

это не отменяет абстракции
отменяет если мы говорим про перфоманс

Ruslan
30.03.2017
18:40:59
ну тогда есть веростность что вас не поймут =)

? animufag ?
30.03.2017
18:41:02
не, там прямо голыми циклами
как ты это проверяешь?

Boris
30.03.2017
18:41:21
как ты это проверяешь?
https://github.com/doomviruz/PerfTests/blob/master/Java/src/com/company/Test.java#L52

код смотрю

Boris
30.03.2017
18:42:24
не, контекст там был выше

Boris
30.03.2017
18:43:43
тут ссылочку дали на типа перфоманс тесты https://github.com/doomviruz/PerfTests/ конечно тестами это назвать сложно, но в целом интересно за счет чего джава (ссылка на код немного выше) выигрывает чуть ли не в двое у того кода, что написал я немного выше

inline fun <T> Array<out T>.sumBy(selector: (T) -> Int): Int { var sum: Int = 0 var i = 0 while (i < size) { sum += selector(get(i)) i++ } return sum } inline fun IntArray.allIndexed(predicate: (Int, Int) -> Boolean): Boolean { var i = 0 while (i < size) { if (!predicate(i, get(i))) return false i++ } return true }

решило сразу все проблемы

есть у меня подозрение, что джит такую пухню намного лучше может оптимизировать чем итераторы

Митко Соловец?
30.03.2017
18:56:45
это просто такие тесты или реально котлин медленее?

Boris
30.03.2017
18:56:49
вообще в стдлиб-е для массивов можно было бы сделать и вот такие реализации

Митко Соловец?
30.03.2017
18:56:57
и как это может повлиять при написании серверных аппликейшенов?

Igor
30.03.2017
18:57:01
решило сразу все проблемы
Я это еще в своей LibGDX игре заметил, что Kotlin foreach внутри foreach создает кучу интераторв и грузит GC (а на старых Android с GC совсем плохо)

Google
Boris
30.03.2017
18:57:44
это просто такие тесты или реально котлин медленее?
а вот же я тут выше написал как должно быть, чтобы быстро работало и не аллоцировало ничего

Митко Соловец?
30.03.2017
18:58:11
inline fun <T> Array<out T>.sumBy(selector: (T) -> Int): Int { var sum: Int = 0 var i = 0 while (i < size) { sum += selector(get(i)) i++ } return sum } inline fun IntArray.allIndexed(predicate: (Int, Int) -> Boolean): Boolean { var i = 0 while (i < size) { if (!predicate(i, get(i))) return false i++ } return true }

Boris
30.03.2017
18:58:15
написать к ним экстеншены и наслаждаться

Митко Соловец?
30.03.2017
18:58:16
это, Борис, да?

Boris
30.03.2017
18:58:44
это, Борис, да?
в обычной жизни это конечно не особо играет

но если надо по пефомансу удолбаться, то может очень даже

Igor
30.03.2017
18:59:04
в либгдх надо использовать местные коллекции без выхлопа
Да да, надо их вообще в Kotlin добавить вместо Java коллекций - что-бы не тормозил ?

Admin
ERROR: S client not available

Митко Соловец?
30.03.2017
18:59:58
в обычной жизни это конечно не особо играет
ну допустим пара микросервисов на котлине, наверно не замечу разницы?

Boris
30.03.2017
18:59:59
Да да, надо их вообще в Kotlin добавить вместо Java коллекций - что-бы не тормозил ?
ну, с котлином намного больше возможностей, можно и красиво сделать и чтобы без лишнего выхлопа

Митко Соловец?
30.03.2017
19:00:07
все равно обычно все в бд и диск упирается

Boris
30.03.2017
19:00:10
все равно обычно все в бд и диск упирается
ну да, а тут просто тест на вычисления по сути, из за этого любая операция, которая джитом не оптимизируется сразу дает сильное просаживание произовдительности

Sergey
30.03.2017
19:01:10
это просто такие тесты или реально котлин медленее?
в оригинальном сравнении когда заявляли что он медленнее в 3-4 раза уже нашли ошибку и теперь разницы нет

или скале

у них на таком бенчмарке проблемы серьезные)

Boris
30.03.2017
19:02:25
в оригинальном сравнении когда заявляли что он медленнее в 3-4 раза уже нашли ошибку и теперь разницы нет
реально из за итераторов почти вдвое медленнее по моим замерам получилось

после замены на while всё стало летать

Google
Boris
30.03.2017
19:02:58
еще быстрее чем на джаве

Igor
30.03.2017
19:03:17
у них на таком бенчмарке проблемы серьезные)
А у них там иммутабельные коллекции используются?

Boris
30.03.2017
19:03:29
там конечно погрешность очень большая, так что 10% не имеет смысл считать разницей

главное не на го
а чем го для такого теста плох? должно летать мама не горюй

Sergey
30.03.2017
19:04:10
А у них там иммутабельные коллекции используются?
можешь исходники глянуть. но вроде как везде примитивы https://github.com/doomviruz/PerfTests/blob/master/Scala/src/Test.scala

а чем го для такого теста плох? должно летать мама не горюй
на таком тесте го себя не очень показал

Boris
30.03.2017
19:04:49
на таком тесте го себя не очень показал
судя по тому как написан код на котлине, я бы не стал доверять тесту на го

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

Митко Соловец?
30.03.2017
19:06:36
кто шарит, поясните пожалуйста

Sergey
30.03.2017
19:07:04
ребят, а в чем ошибка была?
Array<Int> юзали вместо IntArray, из-за этого оверхед с боксингом был

Boris
30.03.2017
19:07:08
ребят, а в чем ошибка была?
Array<Int> вместо IntArray

Митко Соловец?
30.03.2017
19:07:32
такие тонкости откуда можно узнать? в доках котлина описывается?

Igor
30.03.2017
19:08:14
можешь исходники глянуть. но вроде как везде примитивы https://github.com/doomviruz/PerfTests/blob/master/Scala/src/Test.scala
Я думаю если переписать эти красивые for на which с индексом будет так же быстро и не идиоматично

Sergey
30.03.2017
19:10:50
компилятор котлина сам умеет Int в примитивы гонять, но не в случае с массивом

Sergey
30.03.2017
19:13:53
это фанаты гошечки просили этот тест. им дали, но пока молчат. заряжают страшные вещи типа >если использовать средства языка и использовать горутины, время уменьшается в ~3 раза — play.golang.org/p/PO6KeoAt7z плюс если обьявлять структуру не с массивами, а срезами и потом их инициализировать отдельно, то у меня выигрыш еще ~20 сек вышел — play.golang.org/p/wiKY4tEyYo. Меняется расположение массива. Уже не часть структуры, а указатель на него. Хотя так как потом передается слайс в функцию, а не массив, то по идее разницы не должно быть. Но тут надо профилировать

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

Boris
30.03.2017
19:15:27
?
а, понял. так я же так и сделал

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