Jabel — как я потрошил компилятор Java

JDK 8 уже 5 лет, а многие проекты до сих пор используют эту версию байткода как целевую. Вот только сам язык Java развивается, появляются новые вкусные возможности синтаксиса (такие как "var", switch expressions, multi-line strings, улучшения для diamond оператора и абстрактных классов), а компилятор их позволяет использовать только с JDK той же версии.

Правда, если посмотреть на байткод, который генерируется для этих "фичей", он ничем не отличается от Java 8, что как бы намекает, что они являются чистым синтаксическим сахаром (в отличие от лямбд в Java 8, например). Так почему javac не позволяет их использовать для более старых целевых версий?

Этот вопрос мучал меня многие годы, и я решил полезть в код javac (а ведь он тоже на Java) и выяснить. И вы не поверите что я там нашёл! :)

Данный доклад расскажет, как устроены некоторые части javac, как работает добавление новых фичей, механизм plugin-ов, а так же что (и как) делает Jabel, чтобы позволить использовать синтаксис последних версий языка Java, при этом не нарушая Java 8 совместимость.



Сергей Егоров,

Pivotal

@bsideup
Jabel — как я потрошил компилятор Java
Сергей Егоров,
Pivotal
@bsideup
JDK 8 уже 5 лет, а многие проекты до сих пор используют эту версию байткода как целевую. Вот только сам язык Java развивается, появляются новые вкусные возможности синтаксиса (такие как "var", switch expressions, multi-line strings, улучшения для diamond оператора и абстрактных классов), а компилятор их позволяет использовать только с JDK той же версии.

Правда, если посмотреть на байткод, который генерируется для этих "фичей", он ничем не отличается от Java 8, что как бы намекает, что они являются чистым синтаксическим сахаром (в отличие от лямбд в Java 8, например). Так почему javac не позволяет их использовать для более старых целевых версий?

Этот вопрос мучал меня многие годы, и я решил полезть в код javac (а ведь он тоже на Java) и выяснить. И вы не поверите что я там нашёл! :)

Данный доклад расскажет, как устроены некоторые части javac, как работает добавление новых фичей, механизм plugin-ов, а так же что (и как) делает Jabel, чтобы позволить использовать синтаксис последних версий языка Java, при этом не нарушая Java 8 совместимость.
О спикере
O спикере
Сергей работает в компании Pivotal в команде Project Reactor.

Он является активным участником open source-сообщества, членом Apache Software Foundation, одним из главных разработчиков проекта Testcontainers и контрибьютором в разного рода проектах (Apache Groovy, Testcontainers, Spring Boot, JBoss Modules и не только).
Все спикеры
Все спикеры
Партнёры SnowOne
Онлайн-партнёры
Click to order
Cart
Total: 
Личные данные напечатаем на бейдже, а на почту пришлём подтверждение оплаты в течение 30 минут
Имя
Фамилия
Компания
Должность
E-mail
Оплачивая участие, вы соглашаетесь на обработку персональных данных и с условиями пользования сайтом