Kotlin's scoped extensions micro-benchmarked
How do they get compiled, what is the runtime cost we can expect?
![](../images/Kotlin_Icon.png)
My last post was about an approach to use Kotlin's scoped extension methods to implement an application with data oriented design paradigm. Yes, I'm still coding that game engine, that's why I had to do a simple benchmark, just to get a feeling how performance could get better or worse. See it as a brain dump. Very unprofessional benchmark with the println statement, but I wanted to get the relation between the simple baseline implementation and the extension method version, like this:
import org.openjdk.jmh.annotations.Benchmark interface Extension<ELEMENT>{ fun ELEMENT.prettyPrint() { println("Default pretty " + this) } } object StringListExtension : Extension<String> fun <T> someFrameWorkFunction(parameter : T, extensionProvider: Extension<T>) { with(extensionProvider) { parameter.prettyPrint() } } @Benchmark fun extension() { someFrameWorkFunction("asd", StringListExtension) } fun String.prettyPrint() { println("Default pretty " + this) } @Benchmark fun baseline() { "asd".prettyPrint() }
Surprising results again:
Benchmark Mode Cnt Score Error Units BenchmarkRunner.benchmarkBaseline thrpt 200 269087.160 ± 17915.393 ops/s BenchmarkRunner.benchmarkExtension thrpt 200 329648.131 ± 19646.005 ops/s
Once again, the opposite of my expectations.