Может ли компилятор Kotlin оптимизировать функции обертки?

Я новичок в Kotlin, но я хочу попробовать использовать его для разработки игр, нацелив хотя бы Android с OpenGL ES 2.0 и HTML5 на WebGL (с которым я достаточно хорошо знаком). Не обязательно иметь несколько разных версий классов / функций моего движка для WebGL и GLES20, очевидно, было бы хорошо, но есть ли практический способ добиться этого в Котлине без накладных расходов?

Я думаю, что мне нужно будет написать класс, который реализует WebGLRenderingContextBase или его клон (если необходим клон, я могу просто использовать делегат для реализации WebGL) в OpenGL ES 2.0, полный таких методов:

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

Я напишу сценарий, чтобы выполнить основную часть работы.

Мой вопрос в том, достаточно ли компилятор, чтобы оптимизировать такие обертки и использовать GLES20.glBindBuffer и т. Д. Непосредственно в моем классе vtable или в любом эквиваленте JVM? Предположительно, inline не может быть полезен при вызове переопределенного метода посредством ссылки на интерфейс или базовый класс.

    Компилятор Kotlin не оптимизирует байт-код в такой степени, и ему не нужно: сам JVM неплохо оптимизирует код.

    Кроме того, inline функции не были разработаны как инструмент производительности в Котлине, вместо этого они используются для нелокального потока управления и преобразования кода, чего невозможно достичь без инкрустации.

    На самом деле JVM выполняет множество оптимизаций, избавляя компиляторов от необходимости оптимизации байт-кода, который они генерируют на своей стороне слишком много. И встраивание – одна из оптимизаций, которые может выполнять JVM. (1) (2) (3)

    Хотя ни компиляторы, ни JVM не могут встроить собственные методы из-за совершенно другой природы собственного кода.

    Компилятор Kotlin, в свою очередь, выполняет некоторые локальные оптимизации, которые не влияют на общую структуру программы. Еще одна причина для этого – отладочный опыт, который трудно сохранить с большими оптимизациями. Чтобы проверить точную оптимизацию Kotlin, вы можете попытаться отключить их, добавив флаг -Xno-optimize в бесплатные аргументы компилятора, затем просмотрите сгенерированный байт-код или выполните некоторый бенчмаркинг.

    Intereting Posts