
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
ни у кого нет хороших мыслей? наверное стоит профайлер запустить всё-таки

Igor
30.03.2017
18:32:31
посмотрел код этих перфоманс-тестов, которые выше фигурировали, переписал на котлинвей, получилось что-то вроде такого, но работает и правда медленнее джавы, кто без профайлера скажет почему:
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)) }у меня из вариантов только итераторы пока
А он в java8 скомпилирован?

Google

Boris
30.03.2017
18:32:54
аха

Igor
30.03.2017
18:34:14

Boris
30.03.2017
18:35:01

Igor
30.03.2017
18:35:38

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

Boris
30.03.2017
18:35:59

Ruslan
30.03.2017
18:36:24

Boris
30.03.2017
18:36:37

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
замыкание
нету там ниодно ни замыкания ни лямбды ни кложуры

Igor
30.03.2017
18:38:17
посмотрел код этих перфоманс-тестов, которые выше фигурировали, переписал на котлинвей, получилось что-то вроде такого, но работает и правда медленнее джавы, кто без профайлера скажет почему:
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)) }у меня из вариантов только итераторы пока
А в java не через paraller-stream делается случаем ??

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

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
код смотрю

? animufag ?
30.03.2017
18:42:11
посмотрел код этих перфоманс-тестов, которые выше фигурировали, переписал на котлинвей, получилось что-то вроде такого, но работает и правда медленнее джавы, кто без профайлера скажет почему:
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)) }у меня из вариантов только итераторы пока
я думал контекст – вот этот код

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

Admin
ERROR: S client not available

Митко Соловец?
30.03.2017
18:59:58

Boris
30.03.2017
18:59:59

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

Boris
30.03.2017
19:00:10

Sergey
30.03.2017
19:01:10
или скале
у них на таком бенчмарке проблемы серьезные)

Boris
30.03.2017
19:02:25
после замены на 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

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

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

Sergey
30.03.2017
19:07:04

Boris
30.03.2017
19:07:08

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

Igor
30.03.2017
19:08:14

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

Boris
30.03.2017
19:12:26

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
?
а, понял. так я же так и сделал