Поддержка асинхронного программирования сейчас представлена примерно везде, и Kotlin — не исключение. В Kotlin 1.3 стабилизировались корутины, удобный и прозрачный механизм для асинхронного программирования.
В этом докладе мы посмотрим на них изнутри: как в принципе представить метод в виде приостанавливаемого вычисления и какие грабли разложены на этом пути. Потом пройдемся по оптимизациям, которые пришлось поддержать в компиляторе, узнаем, где и зачем можно экономить на объектах, и как обхитрить Hotspot. Кроме того, увидим, как отвязать потокобезопасную реализацию корутин от спецификации языка, причём здесь задача о консенсусе и что нужно сделать, чтобы написать отладчик для корутин без перекомпилирования кода.