SlideShare a Scribd company logo
Новый подход к компиляции Scala
в IntelliJ IDEA
Павел Фатин
mail@pavelfatin.com
Scalac + Enter?
Компиляция в IDE
● Интеграция с GUI
● Инкрементальная компиляция
● Сервер компиляции
Интеграция с GUI
● Трансляция сообщений
● Индикация прогресса
● Прерывание компиляции
Инкрементальная компиляция
● Время модификации файлов
● Отображение исходников на классы
● Открытый интерфейс классов
● Анализ зависимостей
● Интеграция с другими компиляторами
Сервер компиляции
● Управление процессом JVM
● Протокол взаимодействия
Обновления
Новая подсистема компиляции
● Сборка в отдельном процессе
● SBT для инкрементальной компиляции
● Замена сервера компиляции
Сборка в отдельном процессе
● Снижение потребления памяти IDEA
● Уменьшение нагрузки на GC
● Разгрузка PSI и VFS в IDEA
● Ускорение компиляции
● Сборка из командной строки
Улучшение
инкрементальной компиляции
Пример 1: Sealed class
T.scala
Main.scala
Пример 1*: Sealed class
T.scala*
Main.scala
?...
Foo.scala
foo bar
Пример 2: Named parameters
Foo.scala
Main.scala
Foo.scala
Пример 2*: Named parameters
foo bar
Foo.scala*
Main.scala
foo
Пример 3: Implicit conversion
Foo.scala
Main.scala
Пример 3*: Implicit conversion
foo
Main.scala
Foo.scala*
SBT компилятор
● Scala-специфичный анализ кода
● Запуск компилятора внутри процесса
● Совмещение различных версий Scala
● Простая передача аргументов и сообщений
Новый сервер компиляции
● Решение проблем с FSC
● Общий сервер для всех проектов
● Упрощение конфигурации
Результаты
● Снижение нагрузки на процесс IDEA
● Возможность сборки из командной строки
● Улучшенная инкрементальная компиляция
● Запуск Scalac и Javac внутри процесса
● Общий сервер компиляции
● Упрощение конфигурации проекта
Спасибо!

More Related Content

What's hot

Сергей Орлов
Сергей ОрловСергей Орлов
Сергей Орлов
CodeFest
 
DevOps
DevOps DevOps
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
Provectus
 
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь Кашкута
CodeFest
 
Ускорение фронтенда ponominalu.ru
Ускорение фронтенда ponominalu.ruУскорение фронтенда ponominalu.ru
Ускорение фронтенда ponominalu.ru
Денис Сергеевич Басковский
 
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NETДенис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Elias Fofanov
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
Fwdays
 
GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
Victor Login
 
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
MoscowJS
 
Вячеслав Смирнов - Инструменты нагрузочного тестирования
Вячеслав Смирнов - Инструменты нагрузочного тестированияВячеслав Смирнов - Инструменты нагрузочного тестирования
Вячеслав Смирнов - Инструменты нагрузочного тестирования
Elias Fofanov
 
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Ontico
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
Alex Chistyakov
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...it-people
 
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
Ontico
 
Александр Афенов
Александр АфеновАлександр Афенов
Александр Афенов
CodeFest
 
DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...
DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...
DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...
DevOps_Fest
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
it-people
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
WrikeTechClub
 
Continuous Integration для C++ разработчика
Continuous Integration для C++ разработчикаContinuous Integration для C++ разработчика
Continuous Integration для C++ разработчика
Pavel Filonov
 
Continuous Integration for C++ engineers
Continuous Integration for C++ engineersContinuous Integration for C++ engineers
Continuous Integration for C++ engineers
corehard_by
 

What's hot (20)

Сергей Орлов
Сергей ОрловСергей Орлов
Сергей Орлов
 
DevOps
DevOps DevOps
DevOps
 
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
 
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь Кашкута
 
Ускорение фронтенда ponominalu.ru
Ускорение фронтенда ponominalu.ruУскорение фронтенда ponominalu.ru
Ускорение фронтенда ponominalu.ru
 
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NETДенис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
 
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
 
Вячеслав Смирнов - Инструменты нагрузочного тестирования
Вячеслав Смирнов - Инструменты нагрузочного тестированияВячеслав Смирнов - Инструменты нагрузочного тестирования
Вячеслав Смирнов - Инструменты нагрузочного тестирования
 
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
 
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
 
Александр Афенов
Александр АфеновАлександр Афенов
Александр Афенов
 
DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...
DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...
DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 
Continuous Integration для C++ разработчика
Continuous Integration для C++ разработчикаContinuous Integration для C++ разработчика
Continuous Integration для C++ разработчика
 
Continuous Integration for C++ engineers
Continuous Integration for C++ engineersContinuous Integration for C++ engineers
Continuous Integration for C++ engineers
 

Viewers also liked

Functional Programming - Worth the Effort
Functional Programming - Worth the EffortFunctional Programming - Worth the Effort
Functional Programming - Worth the Effort
BoldRadius Solutions
 
Александр Подхалюзин, «Магия Scala изнутри»
Александр Подхалюзин, «Магия Scala изнутри»Александр Подхалюзин, «Магия Scala изнутри»
Александр Подхалюзин, «Магия Scala изнутри»
e-Legion
 
MBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, AviasalesMBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, Aviasales
e-Legion
 
MBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500StartupsMBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500Startups
e-Legion
 
MBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha RestoranyMBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha Restorany
e-Legion
 
MBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba MobileMBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba Mobile
e-Legion
 
MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetrica
e-Legion
 
MBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, PureMBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, Pure
e-Legion
 

Viewers also liked (8)

Functional Programming - Worth the Effort
Functional Programming - Worth the EffortFunctional Programming - Worth the Effort
Functional Programming - Worth the Effort
 
Александр Подхалюзин, «Магия Scala изнутри»
Александр Подхалюзин, «Магия Scala изнутри»Александр Подхалюзин, «Магия Scala изнутри»
Александр Подхалюзин, «Магия Scala изнутри»
 
MBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, AviasalesMBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, Aviasales
 
MBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500StartupsMBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500Startups
 
MBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha RestoranyMBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha Restorany
 
MBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba MobileMBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba Mobile
 
MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetrica
 
MBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, PureMBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, Pure
 

Similar to A new way to compile

"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
Provectus
 
Breaking logs
Breaking logsBreaking logs
Breaking logs
Ilya Sergeev
 
доклад про Llvm
доклад про Llvmдоклад про Llvm
доклад про LlvmVadim Evard
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Platonov Sergey
 
Magento performance
Magento performanceMagento performance
Magento performance
aheadWorks
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Cisco Russia
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
aviatakz
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
Andrey Kazarinov
 
Виктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаВиктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаPositive Hack Days
 
Tuning Azure Service Bus (RU)
Tuning Azure Service Bus (RU)Tuning Azure Service Bus (RU)
Tuning Azure Service Bus (RU)
Pavel Sokolov
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"
Badoo Development
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
corehard_by
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
Alexander Babich
 
Java compilers and IDEs
Java compilers and IDEsJava compilers and IDEs
Java compilers and IDEschashnikov
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
03 update of jira confluence
03 update of jira confluence03 update of jira confluence
03 update of jira confluence
Andrew Lesnyh
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
Kirill Rozov
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
Andriy Samilyak
 

Similar to A new way to compile (20)

"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
Breaking logs
Breaking logsBreaking logs
Breaking logs
 
доклад про Llvm
доклад про Llvmдоклад про Llvm
доклад про Llvm
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
 
Magento performance
Magento performanceMagento performance
Magento performance
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Виктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаВиктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчика
 
Tuning Azure Service Bus (RU)
Tuning Azure Service Bus (RU)Tuning Azure Service Bus (RU)
Tuning Azure Service Bus (RU)
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
Java compilers and IDEs
Java compilers and IDEsJava compilers and IDEs
Java compilers and IDEs
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
03 update of jira confluence
03 update of jira confluence03 update of jira confluence
03 update of jira confluence
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
GitFlow_MOEX
GitFlow_MOEXGitFlow_MOEX
GitFlow_MOEX
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
 

A new way to compile