![][1]
О Kotlin последнее время уже очень много сказано (особенно в совокупности с последними новостями c Google IO 17), но в то же время не очень много такой нужной информации, во что же компилируется Kotlin.
Давайте подробнее рассмотрим на примере компиляции в байткод JVM.
Это первая часть публикации. Вторую можно посмотреть [тут][2]
Процесс компиляции это довольно обширная тема и чтобы лучше раскрыть все ее нюансы я взял большую часть примеров компиляции из выступления Дмитрия Жемерова: [Caught in the Act: Kotlin Bytecode Generation and Runtime Performance][3]. Из этого же выступления взяты все бенчмарки. Помимо ознакомления с публикацией, настоятельно рекомендую вам еще и посмотреть его выступление. Некоторые вещи там рассказаны более подробно. Я же больше внимания акцентирую именно на компиляции языка.
[Функции на уровне файла][4]
[Primary конструкторы][5]
[data классы][6]
[Свойства в теле класса][7]
[Not-null типы в публичных и приватных методах][8]
[Функции расширения (extension functions)][9]
[Тела методов в интерфейсах][10]
[Аргументы по умолчанию][11]
[Лямбды][12]
Но прежде чем рассмотрим основные конструкции языка и то, в какой байткод они компилируются, нужно упомянуть о том, как непосредственно происходит сама компиляция языка:
[Читать дальше →][13]
[1]:
https://habrastorage.org/web/3af/e51/f5a/3afe51f5a54a4ce583d5665dfb4d06c3.png
[2]:
https://habrahabr.ru/company/inforion/blog/330064/
[3]:
https://www.youtube.com/watch?v=35GACInsZsk
[4]:
https://habrahabr.ru/company/inforion/blog/330060/#P1
[5]:
https://habrahabr.ru/company/inforion/blog/330060/#P2
[6]:
https://habrahabr.ru/company/inforion/blog/330060/#P3
[7]:
https://habrahabr.ru/company/inforion/blog/330060/#P4
[8]:
https://habrahabr.ru/company/inforion/blog/330060/#P5
[9]:
https://habrahabr.ru/company/inforion/blog/330060/#P6
[10]:
https://habrahabr.ru/company/inforion/blog/330060/#P7
[11]:
https://habrahabr.ru/company/inforion/blog/330060/#P8
[12]:
https://habrahabr.ru/company/inforion/blog/330060/#P9
[13]:
https://habrahabr.ru/post/330060/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut