Почему мы выбрали Kotlin целевым языком компании. Часть 1: Ретроспектива
Компания ДомКлик существует с 2015 года, и за это время мы успели сменить целевой язык для разработки ключевых сервисов с Java на Kotlin.
Меня зовут Александр Коцюруба, я IT Lead в компании ДомКлик. Отвечая на вопрос, почему мы перешли на Kotlin, я опубликую два материала:
1. Первая часть будет посвящена ретроспективе возникновения языка (которую вы, собственно, и будете сейчас читать)
2. Вторая часть будет ориентирована на практически примеры (которая выйдет позже)
Итак, начнем.
2010 год:
— в августе проходит парад планет
— в начале декабря в Цюрихе прошло объявление России как страны, принимающей чемпионат мира по футболу 2018 года
— в конце декабря компания JetBrains выпускает Intellij IDEA 10.0
Для JetBrains IDE — основной продукт, и они, как IT-компания, заинтересованы в быстром развитии и качестве своих продуктов. Разрабатывается Intellij IDEA на платформе JVM 6. С одной стороны, виртуальная машина отлично справляется с нагрузкой, надежна, как автомат Калашникова, и представлена внушительным сообществом. С другой стороны, развитие Java как языка начинает замедляться. Это связано в том числе с финансовыми трудностями в компании Sun Microsystems — языку банально начинают уделять меньше внимания, это видно из релизной частоты Java.
Таймлайн релизов Java и Intellij IDEA:
Как видно компания JetBrains успела выпустить шесть мажор-версий Intellij IDEA. В то время как Java продвинулось только на одну. Причем Java 6 не была большим прорывом, как, например, Java 5.
На момент 2010 года Java уже достигла совершеннолетия (~20лет, старт разработки в 1990 году) и слегка «обросла мхом» в размере >50k классов. Со слов Андрея Бреслава abreslav, принимающего участие как внешний эксперт в разработке лямбд для Java, добавить такой функционал не нарушив работу JVM было достаточно сложно (одна из причин отложить релиз функционала в Java 8).
Это сподвигло JB посмотреть в сторону других языков для разработки своих продуктов. В компании были компетенции по разработке на популярных на тот момент языках Groovy и Scala.
От Groovy пришлось отказаться из-за недостатков динамически типизированных языков:
- Низкая производительность языка в runtime
- Высокая стоимость рефакторинга
- Отсутствие полноценной IDE
Scala также не подошла для внутренней разработки JetBrains:
- Отсутствие полноценной IDE для языка
- Высокий порог входа
- Высокая стоимость разработчиков
- Производительность компилятора
Стоит отметить, что Scala была удачным проектом с точки зрения совмещения разных концепций в одном языке.
В то же время JetBrains при разработке той или иной среды разработки пишет фронтальный компилятор для соответствующего языка. Это включает в себя разбор семантического дерева, подсветку и т.п. Другими словами, описывает половину работы компилятора. Имея на тот момент 7 IDE, можно сказать, что компания JetBrains разработала 3.5 компилятора.
Очевидно, что лаконичный код поможет сфокусироваться на бизнес-логике, что, в свою очередь, увеличит скорость разработки и уменьшит риск ошибки. Java 6 этому не способствовала, а жизнь самого языка и платформы была непонятна (отсылка к SUN и слухам продажи в Oracle Corp). Это подтолкнуло компанию к разработке языка под свои внутренние нужды.
Ключевые требования к языку были следующие:
- Совместимось с Java (т.к. в компании большое количество кода уже было на Java)
- Лаконичность
- Быстрый
- Типобезопасность
Так зародился проект под названием Kotlin.
2010 — 2016:
2012:
К этому времени появляется MVP Kotlin.
JB переводит Kotlin в статус opensource и начинает активно его использовать для внутренней разработки IDE. По результатам опыта внутреннего использования планируется решить, выпускать ли первый релиз продукта.
2016:
Выходит релиз Kotlin 1.0 с поддержкой JVM 6 и Android. В это время ДомКлик также пилотирует Kotlin и выпускает написанный на нем сервис безопасных расчетов — безналичный способ взаиморасчета за объект недвижимости между покупателем и продавцом. Разработчики довольны лаконичностью, возможностями и идеми языка и принимает решение включить Kotlin в список «дозволенных языков разработки».
2017 — наши дни:
2017 март:
Выходит релиз Kotlin 1.1. Среди значимых фич стоит отметить:
- Поддержка JVM 8
- Корутины(экспериментальная версия)
- Компилятор в JavaScript
Пару слов хочется добавить про компиляцию в JS. Учитывая опыт по разработке фронтальных компиляторов и потребности разработки, Kotlin практически с самого начала поставил перед собой задачу поддержку мультиплатформенности (Kotlin MPP, подробнее дальше в статье).
2017 Ноябрь:
Выходит релиз Kotlin 1.2. В релиз включают:
- Поддержка мультиплатформы
- Компилятор в нативный код(экспериментальная версия)
Под поддержкой мультиплатформы подразумевается возможность подключения в проект модулей как специфичных для конкретной платформы, так и общих для платформ.
В это же время Google включает поддержку языка Kotlin по умолчанию в Android Studio 3.0. На мой взгляд, это значимое событие для сообщества Kotlin, т.к. по сути язык получил признание со стороны Android сообщества в лице гиганта Google.
2018:
В октябре выходит релиз 1.3, включающий стабильные корутины с обратной совместимостью и компилятор в нативный код.
В этом же году на архитектурном комитете в ДомКлике принимается решение о смене целевого языка разработки с Java на Kotlin.
2019:
В 2019 году для сообщества Kotlin происходит важное событие — все тот же Google на конференции устанавливает Kotlin как стандарт для разработки Android приложений.
Весной 2019 мы достигаем переломной точки в смене Java на Kotlin. Наши графики показывают, что прирост функционала на Kotlin опередил Java. Другими словами, мы стали больше писать на Kotlin, нежели на Java, и наша ключевая компетенция де-факто сменилась на Kotlin.
Наши дни:
На сегодняшний день стоит отметить Kotlin for Data science. Данную тему хотелось бы осветить отдельно, погрузившись подробнее и показав преимущества. У нас же в компании на server-side доминирует Kotlin — функционал перерос Java более, чем в 3 раза.
Kotlin компиляторы:
При помощи Kotlin MPP вы можете использовать Kotlin как дефолтный язык в разработке в своей компании. Мы в ДомКлике провели успешный пилот по разработке ипотечного калькулятора на Kotlin MPP для платформ Kotlin/JVM (Server-Side + Android) + Kotlin/Native (iOS). В дальнейших наших планах расширить пилот до Kotlin/JS.
И подводя итоги.
Первая часть статьи вышла теоритически-исторической, на то она и ретроспектива. Вторая часть будет ближе к практике, в ней мы рассмотрим на примере Kotlinn/JVM:
- как он живет совместно с компилятором Java
- разберем несколько кейсов из Kotlin’a и как именно они отрабатывают на платформе Java.
Полезные ресурсы:
1. kotlinlang.org
2. Доклад Андрея Бреслава — Что такое Kotlin? Введение
3. Доклад Андрея Бреслава — Project Kotlin