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

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

Меня зовут Александр Коцюруба, руковожу разработкой внутренних сервисов в компании ДомКлик. Отвечая на вопрос, почему мы перешли на 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:


Как видно компания 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 компилятора.



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

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

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

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

2010 — 2016:




2012:


К этому времени появляется MVP Kotlin.

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

2016:


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

2017 — наши дни:




2017 март:


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

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

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

2017 Ноябрь:


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

  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.

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

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

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

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

  1. kotlinlang.org
  2. Доклад Андрея Бреслава — Что такое Kotlin? Введение
  3. Доклад Андрея Бреслава — Project Kotlin
Источник: https://habr.com/ru/company/domclick/blog/496288/


Интересные статьи

Интересные статьи

В первой части статьи я описал как создать простого чат бота, в этой статье мы научим нашего бота говорить и слушать русскую речь и переводить ее в текст. Читать дальш...
Идём в глубь острова сокровищ с названием "Алгоритм". Читать дальше →
Всем привет! Проектирование, печать и сборка нового корпуса наконец-то завершились. Также завершился запуск новой платы управления на базе STM32F373 и FW успешно перенесено на новый МК. Все бли...
В этой статье я собираюсь рассмотреть вопрос повышения скорости отчетов. Под отчетом я понимаю любой запрос в базу данных, который использует агрегирующие функции. Также, я собираюсь затронуть во...
Привет, %username%. Как я и обещал ранее, я немного пропал в связи со своей командировкой. Нет, она ещё не закончилась, но навеяла некоторые мысли, которыми я решил поделиться с тобой. ...