JEP 199: Smart Java Compilation, Phase Two
интеллектуальная компиляция Java, второй этап
| Ответственный | Andreas Lundblad |
| Тип | Feature |
| Область | JDK |
| Статус | Closed / Delivered |
| Выпуск | 9 |
| Компонент | tools / javac |
| Обсуждение | compiler dash dev at openjdk dot java dot net |
| Трудоёмкость | L |
| Длительность | L |
| Рецензенты | Brian Goetz |
| Одобрен | Brian Goetz |
| Создан | 2014/05/16 11:43 |
| Обновлён | 2016/07/12 22:08 |
| Задача | 8043311 |
Аннотация
Доработать инструмент sjavac так, чтобы его можно было использовать по умолчанию при сборке JDK, и обобщить его так, чтобы с его помощью можно было собирать и другие крупные проекты, помимо JDK.
Цели
Из-за ряда проблем со стабильностью и переносимостью sjavac по умолчанию не используется в сценариях сборки JDK. Первая цель этого JEP — устранить эти проблемы. Для этого нужно добиться, чтобы инструмент всегда давал надёжные результаты на всех программных и аппаратных конфигурациях.
Общая цель — повысить качество sjavac до уровня, на котором он сможет служить универсальной обёрткой над javac, способной компилировать крупные произвольные Java-проекты.
В рамках последующего проекта будет изучено, как и нужно ли вообще включать sjavac в набор инструментов JDK. Это может быть отдельный поддерживаемый самостоятельный инструмент, неподдерживаемый самостоятельный инструмент, интеграция с javac или что-то иное.
Что не является целью
Целью этого JEP не является добавление новых возможностей, которых сейчас нет, которые не требуются нашим собственным сценариям сборки и не способствуют созданию универсальной обёртки над javac. Переписывать обёртку заново не предполагается. Текущая функциональность, которая хорошо работает, будет сохранена без изменений.
Включение sjavac в продукт, если это будет сочтено нужным, станет предметом отдельного JEP.
Мотивация
Текущая реализация оказалась полезной и действительно ускоряет сборку и позволяет выполнять инкрементные сборки. Однако качество кода и стабильность инструмента в целом неудовлетворительны, и он определённо не готов к публичному выпуску.
Описание
Эта работа опирается на ранее поставленную реализацию, описанную в JEP 139. Работа, описанная в этом JEP, будет выполняться постепенно: инкрементные исправления к существующей реализации будут писаться, тестироваться и фиксироваться в репозитории.
Сначала работа будет сосредоточена на устранении проблем, связанных со сборкой JDK. В том числе нужно решить следующие задачи:
- JDK-8014510 Исправить
sjavacна всех платформах в JPRT - JDK-8019239 Как следует привести в порядок эвристики
sjavac
Кроме того, будут решены следующие задачи:
- Переработать протокол, возможно, с использованием RMI
- Сделать имена и синтаксис параметров более согласованными с параметрами
javac - Заменить журналирование в
System.{out,err}более подходящим механизмом - Повысить степень параллелизма за счёт более широкого совместного использования ресурсов в
javac, где это возможно
Задачи, которые предстоит решить в дальнейшем, включают, помимо прочего:
- Интернационализацию
- Поддержку Jigsaw
Потребуется определённым образом адаптировать javac. Прежде всего, javac придётся переработать так, чтобы несколько одновременных компиляций могли совместно использовать общие структуры данных; это позволит сильнее ускорить работу и лучше загрузить процессор на многоядерных машинах.
Тестирование
Помимо обычных обязательных модульных тестов, sjavac будет тщательно протестирован на всех платформах, поскольку часть инструмента связана с особенностями конкретных платформ, например с путями к файлам и запуском фоновых процессов.
Кроме того, sjavac будет подвергнут нагрузочному тестированию с учётом конкурентности, поскольку клиент-серверная архитектура по своей природе параллельна.
Зависимости
Работа, предлагаемая в этом JEP, опирается на результаты JEP 139: Enhance javac to Improve Build Speed.