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函数不可能有任何用处。

One Solution collect form web for “Kotlin编译器能否优化掉包装函数?”

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

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

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

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

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

  • Android ValueAnimator仅增加高度
  • 如何使用moshi创建复杂的json而不需要定义类?
  • Kotlin lambda以Interface作为参数
  • Kotlin + Spring Boot请求编组
  • Kotlin有一个标准的方式来将一个数字格式化为一个英文序数?
  • 服务器套接字侦听客户端与轮询服务的Android即时通讯应用程序
  • Kotlin | 合并2 ArrayList <Int>在一个ArrayList中<Int>
  • 为什么Kotlin没有十进制?
  • 如何检测Data class Kotlin中更改的值?
  • 在Grid View和Kotlin的List Veiw之间进行连接
  • 我怎么能在Kotlin有一个复合键?
  • Kotlin language will be the best programming language for Android.