Syntactically functions are first-class citizens in Kotlin. Performancewise, however, they aren't. Is this a bug?
fun dummy(x: Long) : Long{ return x+1 }
fun call(fn: (Long)->Long, x: Long) : Long {
return fn(x)
}fun callDummy(x : Long) {
dummy(x)
}fun tic(message: String) : ()-> Unit {
val time = System.currentTimeMillis()
println(message)
return {
println(“${(System.currentTimeMillis() - time)/1000f} seconds”)
}
}fun main (args : Array<String>) {
val n = 10000000000
val toc1 = tic(“callDummy(x) $n times”)
for (x in 1…n)
callDummy(x)
toc1()
val toc2 = tic(“call(::dummy, x) $n times”)
for (x in 1…n)
call(::dummy, x)
toc2()
val toc3 = tic(“(::dummy)(x) $n times”)
for (x in 1…n)
(::dummy)(x)
toc3()
val toc4 = tic(“dummy(x) $n times”)
for (x in 1…n)
dummy(x)
toc4()}
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -Didea.launcher.port=7534 “-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 13 CE.app/bin” -Dfile.encoding=UTF-8 -classpath “/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/deploy.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/dt.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/javaws.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/jce.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/jconsole.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/management-agent.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/plugin.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/sa-jdi.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/apple_provider.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/dnsns.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/localedata.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunjce_provider.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunpkcs11.jar:/Users/kburjorjee/Nd/out/production/Nd:/Users/kburjorjee/Library/Application Support/IdeaIC13/Kotlin/kotlinc/lib/kotlin-runtime.jar:/Applications/IntelliJ IDEA 13 CE.app/lib/idea_rt.jar” com.intellij.rt.execution.application.AppMain _DefaultPackage
callDummy(x) 10000000000 times
2.844 seconds
call(::dummy, x) 10000000000 times
54.654 seconds
(::dummy)(x) 10000000000 times
55.41 seconds
dummy(x) 10000000000 times
2.862 seconds