Почему мы выбрали Kotlin целевым языком компании. Часть 1: Ретроспектива

Компания ДомКлик существует с 2015 года, и за это время мы успели сменить целевой язык для разработки ключевых сервисов с Java на Kotlin.

Меня зовут Александр Коцюруба, я IT Lead в компании ДомКлик. Отвечая на вопрос, почему мы перешли на Kotlin, я опубликую два материала:

1. Первая часть будет посвящена ретроспективе возникновения языка (которую вы, собственно, и будете сейчас читать)
2. Вторая часть будет ориентирована на практически примеры (которая выйдет позже)

Итак, начнем.

image

2010 год:


— в августе проходит парад планет
— в начале декабря в Цюрихе прошло объявление России как страны, принимающей чемпионат мира по футболу 2018 года
— в конце декабря компания JetBrains выпускает Intellij IDEA 10.0

Для JetBrains IDE — основной продукт, и они, как IT-компания, заинтересованы в быстром развитии и качестве своих продуктов. Разрабатывается Intellij IDEA на платформе JVM 6. С одной стороны, виртуальная машина отлично справляется с нагрузкой, надежна, как автомат Калашникова, и представлена внушительным сообществом. С другой стороны, развитие Java как языка начинает замедляться. Это связано в том числе с финансовыми трудностями в компании Sun Microsystems — языку банально начинают уделять меньше внимания, это видно из релизной частоты Java.

Таймлайн релизов Java и Intellij IDEA:
0r7hg-74it8raowwqzws_-vt1rk.png
Как видно компания JetBrains успела выпустить шесть мажор-версий Intellij IDEA. В то время как Java продвинулось только на одну. Причем Java 6 не была большим прорывом, как, например, Java 5.

На момент 2010 года Java уже достигла совершеннолетия (~20лет, старт разработки в 1990 году) и слегка «обросла мхом» в размере >50k классов. Со слов Андрея Бреслава abreslav, принимающего участие как внешний эксперт в разработке лямбд для Java, добавить такой функционал не нарушив работу JVM было достаточно сложно (одна из причин отложить релиз функционала в Java 8).

Это сподвигло JB посмотреть в сторону других языков для разработки своих продуктов. В компании были компетенции по разработке на популярных на тот момент языках Groovy и Scala.

От Groovy пришлось отказаться из-за недостатков динамически типизированных языков:

  1. Низкая производительность языка в runtime
  2. Высокая стоимость рефакторинга
  3. Отсутствие полноценной IDE

Scala также не подошла для внутренней разработки JetBrains:

  1. Отсутствие полноценной IDE для языка
  2. Высокий порог входа
  3. Высокая стоимость разработчиков
  4. Производительность компилятора

Стоит отметить, что Scala была удачным проектом с точки зрения совмещения разных концепций в одном языке.

В то же время JetBrains при разработке той или иной среды разработки пишет фронтальный компилятор для соответствующего языка. Это включает в себя разбор семантического дерева, подсветку и т.п. Другими словами, описывает половину работы компилятора. Имея на тот момент 7 IDE, можно сказать, что компания JetBrains разработала 3.5 компилятора.

vflmo-wf33mwq8orbydk7taphgu.png

Очевидно, что лаконичный код поможет сфокусироваться на бизнес-логике, что, в свою очередь, увеличит скорость разработки и уменьшит риск ошибки. Java 6 этому не способствовала, а жизнь самого языка и платформы была непонятна (отсылка к SUN и слухам продажи в Oracle Corp). Это подтолкнуло компанию к разработке языка под свои внутренние нужды.

Ключевые требования к языку были следующие:

  1. Совместимось с Java (т.к. в компании большое количество кода уже было на Java)
  2. Лаконичность
  3. Быстрый
  4. Типобезопасность

Так зародился проект под названием Kotlin.

2010 — 2016:


ctffaonvng-vgnb3jvfjkxr-tpa.png

2012:


К этому времени появляется MVP Kotlin.
JB переводит Kotlin в статус opensource и начинает активно его использовать для внутренней разработки IDE. По результатам опыта внутреннего использования планируется решить, выпускать ли первый релиз продукта.

2016:


Выходит релиз Kotlin 1.0 с поддержкой JVM 6 и Android. В это время ДомКлик также пилотирует Kotlin и выпускает написанный на нем сервис безопасных расчетов — безналичный способ взаиморасчета за объект недвижимости между покупателем и продавцом. Разработчики довольны лаконичностью, возможностями и идеми языка и принимает решение включить Kotlin в список «дозволенных языков разработки».

2017 — наши дни:


dvjoo3fihemsliydonrzvhuiqug.png

2017 март:

Выходит релиз Kotlin 1.1. Среди значимых фич стоит отметить:

  1. Поддержка JVM 8
  2. Корутины(экспериментальная версия)
  3. Компилятор в JavaScript

Пару слов хочется добавить про компиляцию в JS. Учитывая опыт по разработке фронтальных компиляторов и потребности разработки, Kotlin практически с самого начала поставил перед собой задачу поддержку мультиплатформенности (Kotlin MPP, подробнее дальше в статье).

2017 Ноябрь:

Выходит релиз Kotlin 1.2. В релиз включают:

  1. Поддержка мультиплатформы
  2. Компилятор в нативный код(экспериментальная версия)

Под поддержкой мультиплатформы подразумевается возможность подключения в проект модулей как специфичных для конкретной платформы, так и общих для платформ.

_aszqybus0xeuzgnrgpgo3sehuk.png

В это же время Google включает поддержку языка Kotlin по умолчанию в Android Studio 3.0. На мой взгляд, это значимое событие для сообщества Kotlin, т.к. по сути язык получил признание со стороны Android сообщества в лице гиганта Google.

2018:


В октябре выходит релиз 1.3, включающий стабильные корутины с обратной совместимостью и компилятор в нативный код.
В этом же году на архитектурном комитете в ДомКлике принимается решение о смене целевого языка разработки с Java на Kotlin.

2019:


В 2019 году для сообщества Kotlin происходит важное событие — все тот же Google на конференции устанавливает Kotlin как стандарт для разработки Android приложений.

7qqqo9cg3ipxfkq-g8vuectks_k.png
Весной 2019 мы достигаем переломной точки в смене Java на Kotlin. Наши графики показывают, что прирост функционала на Kotlin опередил Java. Другими словами, мы стали больше писать на Kotlin, нежели на Java, и наша ключевая компетенция де-факто сменилась на Kotlin.

Наши дни:


На сегодняшний день стоит отметить Kotlin for Data science. Данную тему хотелось бы осветить отдельно, погрузившись подробнее и показав преимущества. У нас же в компании на server-side доминирует Kotlin — функционал перерос Java более, чем в 3 раза.

Kotlin компиляторы:


jy9azx-d0pcjyqfipdevyzkz6g8.png

При помощи Kotlin MPP вы можете использовать Kotlin как дефолтный язык в разработке в своей компании. Мы в ДомКлике провели успешный пилот по разработке ипотечного калькулятора на Kotlin MPP для платформ Kotlin/JVM (Server-Side + Android) + Kotlin/Native (iOS). В дальнейших наших планах расширить пилот до Kotlin/JS.

И подводя итоги.

Первая часть статьи вышла теоритически-исторической, на то она и ретроспектива. Вторая часть будет ближе к практике, в ней мы рассмотрим на примере Kotlinn/JVM:

  1. как он живет совместно с компилятором Java
  2. разберем несколько кейсов из Kotlin’a и как именно они отрабатывают на платформе Java.

Полезные ресурсы:

1. kotlinlang.org
2. Доклад Андрея Бреслава — Что такое Kotlin? Введение
3. Доклад Андрея Бреслава — Project Kotlin

© Habrahabr.ru