Комментарии 10
Похоже, Kotlin так и не умеет оптимизировать массивы дата-классов из-за ограничений самой JVM. Буду рад, если профессионалы объяснят более подробно.
Например, если мне нужен массив из 10000 элементов типа (Int, Int, Int), то надо создавать массив из 30000 элементов примитивного типа и индексировать каждое поле вручную. Это неструктурно, непонятно для компилятора, трудно векторизуемо, но всё равно работает быстрее, чем массив из 10000 экземпляров класса.
есть вариант с
class TupleSystem {
val fieldA = IntArray()
val fieldB = IntArray()
val fieldC = IntArray()
operator fun get(i: Int) = Tuple(fieldA[i], fieldB[i], fieldC[i])
fun someBunchAction() = (0 until fieldA.size).forEachIndexed {
i, it -> fieldC[i] = fieldA[i] + fieldB[i]
}
}
Непримитивных структур нет в Котлине, потому что их не поддерживает JVM
Опасный путь - добавлять фичи постфактум. Язык разбухает и теряет простоту и элегантность.
А Jackson умеет десериализацию в value class?
Я очень удивлён, что typealias позволяет передать переменную типа Weight в тип Brightness. Неочевидное решение.
Какой тогда смысл в typealias кроме нейминга?
На первый взгляд в golang аналогичные типы понятнее.
Классы значения в Kotlin: прощайте псевдонимы типов?