Kotlin编译器能否优化掉包装函数?

我是Kotlin的新手,但我想尝试使用它来进行游戏开发,至少将Android与OpenGL ES 2.0和HTML5与WebGL(我相当熟悉)进行对比。 对于WebGL和GLES20,我的渲染引擎的类/函数没有稍微不同的版本,显然是一件好事,但是有没有一种实际的方法可以在没有开销的情况下在Kotlin中实现?

我认为我需要做的是在OpenGL ES 2.0中编写一个实现WebGLRenderingContextBase的类或其克隆(如果需要克隆,我可以使用委托来实现WebGL),其中包含如下的方法:

 override fun bindBuffer(target: Int, buffer, Int) { GLES20.glBindBuffer(target, buffer) } 

我会写一个脚本来完成大部分的工作。

我的问题是,编译器是否足够聪明,可以优化掉这样的包装,并直接在我的类的vtable中使用GLES20.glBindBuffer等,或者与JVM有什么相同? 假设通过对接口或基类的引用调用重写的方法, inline函数不可能有任何用处。

Kotlin编译器并没有将字节码优化到这个范围,而且也不需要:JVM本身在优化代码方面非常好。

此外, inline函数并不是Kotlin中的一个性能工具,而是用于非本地控制流和代码转换,而这些转换是无需内联就无法实现的。

实际上,JVM执行了很多优化,使得编译器不必优化他们所产生的字节码。 内联是JVM可以做的优化之一。 (1) (2) (3)

尽管编译器和JVM都不能内联原生方法 ,因为本机代码的性质完全不同。

Kotlin编译器反过来执行一些不影响程序整体结构的本地优化。 还有一个原因就是调试体验很难保持优化。 要检查确切的Kotlin优化,可以尝试通过向免费编译器参数添加-Xno-optimize标志来禁用它们,然后查看生成的字节码或者执行一些基准测试。