Скажите, а не планируются ли всякие оптимзации ком...
# russian
s
Скажите, а не планируются ли всякие оптимзации компилятором в момент подстановки inline функции c учетом выражений известных на этапе компиляции? Пример:
Copy code
kotlin
const val paranoic = false;

inline fun checkParanoic(condition: Boolean) {
 if (paranoic && !condition) error(...)
}

inline fun main() {
 ...
 checkParanoic(false);
 ...
}
Чтобы отключить проверки достаточно установить значение константы, и тогда проверки не будет даже в сборке (может быть полезно там где размер jar-ника важен, например для андроида). Второе более маниакальное приминение: частичное выполнение с известными константами. Например описание классов через рефлексию можно считать константой, тогда, например, код по сериализации компилятор сможет оптимизировать для каждого конкретного типа. Пример:
Copy code
kotlin
data class User(name: String, sername: String)

inline fun <reified T> serialize(obj: T, output: JsonWriter) {
 T::class.properties.forEach {
  output.beginObject()
  output.key(it.name).value(it.getValue(obj))
  output.endObject()
 }
}

fun main() {
  serialize(MyUser("ivan", "ivanov"), JsonWriter(...))
}
Могло бы скомпилироваться в:
Copy code
kotlin
data class User(name: String, sername: String)

fun main() {
  val obj = MyUser("ivan", "ivanov")
  val output = JsonWriter(...)
  output.beginObject()
  output.key("name").value(obj.name)
  output.key("sername").value(obj.sername)
  output.endObject()
}
Что может быть на порядок быстрее чем вытаскивать значение каждого поля через рефлексию.