"Под капотом у Kotlin Coroutine" с Ильмиром Усмановым@JetBrains

suspend, как устроиться на работу в jetbrains, kotlin 1.4, compiler, jetpack compose, under the hood, jetbrains, coroutines

Похожие видео

Описание

Поговорили с Ильмиром Усмановым о устройстве Coroutine под капотом и о их будущем, а также о том какого работать в JetBrains над проектом, от которого миллионы разработчиков ждут покорения новых вершин. Ильмис Усманов - разработчик Kotlin/JVM компилятора в JetBrains. За его плечами 6 лет опыта разработки компиляторов, 2 из которых - поддержка Coroutine в компиляторе. Также наш гость контрибьютил в ART (Android Runtime). - Как устроиться в JetBrains. - Как развлекаются программисты из JetBrains. - Coroutine в Jetpack Compose. - Почему релиз Jetpack Compose может затянуться. - Новый IR backend Kotlin компилятора. - Что будет в Kotlin 1.4 для Coroutine. - Jake Wharton исправляет байт-код от Kotlin/JVM. - Какие возможности могут появиться в Coroutine в будущем. - Улучшения в дебаггере IDEA для поддержки Coroutine. - Inline кода, благодаря которому Flow работают так быстро.

Текстовая версия

Всем привет ето android бродкаст подкаст это наш первый выпуск новым 2020 сегодня мы поговорим о достаточно интересную тему сегодня. Мы будем говорить про к рутины кто-то их обожает кто-то их отрицает и все так же ходят в храм и рыдал и кто-то вообще говорить. Что все это ваша от нечистого и пользуются.

Чем-то другим да мне не очень много и на самом деле хочет рассказать.

Об этом более подробно как это работает какие можно получить преимущество и мы позвали для этого наш подкаст или мира усманова ильмир! Он разработчик jetbrains но никто наверное лучше. Не расскажет про себя чем самый мир и мир привет привет:

Всем но спасибо за приглашение я очень польщен также кстати спасибо. За организацию код и нагреваем минск все было отлично ну про себя я как вы знаете наверное они сразу пришел jetbrains я приду с работы всего.

Два года до этого я в основном конечно занимался компиляторами а вот пришел я в разработку? Еще в институте как enterprise java разработчик к сожалению я там java разработчикам по всего полтора года после этого я ушел а в компилятор ства.

Его тоже где-то 6 лет пишу компиляторы и только компиляторы и честно говоря я совсем ничего.

Не знаю про андроид-разработке кроме того что роберт постоянно ругается на генерируемое мной год ну вот примерно. Так в общих словах полтора года java разработчик и 6 лет каппеля точек и классно вот как-то решил так приключиться. Резко что случилось какой-то день ты пришел и сказал что как бы java работает плохо и я напишу компилятор.

Лучше да нет там летим на города?

Прозаичнее дело в том что когда у нас в институте начался тирпиц я понял что я его совсем не понимаю.

В капиллярной группе эти очки за не было как раз освободилось место поэтому я просто перешёл туда магистратуру и там и остался. Червь из это теоретическая физика я понял да замечательно?

Вот но ты не рассказал достаточно интересный факт перед тем как мы подготавливались к этому выпуску то есть я мы обсуждали: Что будем говорить предварительно да и и мир.

Сказал что он даже кантри beautiful world да это был давние: Веселое время веселые в том плане что я тогда работал в самсунге я пришел в samsung.

Чтобы написать диплом написала его по поводу моей кантри бьются gcc и после того как проект с газация закрыли я некоторое! Время писал небольшой интерпретатор java скрипта для контроллеров который кстати даже использовался в часах. Pebble до того как ты был как компанию кто-то купил я вас не помню кто а вот после этого этапе татары!

Я как раз занимался разработкой в то время еще samsung арт то есть форка арта для сотовых.

Телефонов и концу моей работы в самсунге google погрозил самсунгу. Пальцем и сказал что давайте вы не будете разрабатывать свой арт а gucci взамен кантри beauty мы stream ну и таким образом получилось!

Что я крепить его вард классно видишь то есть фактически стоим трудом сталкиваются многие! Люди то есть даже не явно то есть хотя частичка тебя есть каждом. Android-смартфоне особенно samsung ну да по моим начиная с 5 версии при любой установки любого приложения запускается мой кот круть круть:

Теперь каждый раз когда был снова из приложения будут думать о тебе хорошо.

Давай тогда поговорим текущее время про твоя настоящая сейчас ты занимаешься разработкой компилятора от лин что именно.

Ты делаешь что входит в зону твой ответственности. Как мы можем понять что вот эту часть сделал. Ты ну вот последние два года практически сразу после того как я пришел jetbrains я занимаюсь крути нами для чего им бэкенда велели дживы.

Импотентов потому что их теперь 2 старые богады а я и вы можете понять. Что я этим занимаюсь просто по наличию ключевого слова.

Spend ну и еще я конечно там этот отвечаю за под систему backend живым. Онлайн но к сожалению у меня всего две руки и одна голова поэтому богемный лайнер висят дождь эмп однако рутины а почему ты занимаешься.

Только джемом то есть для него для java script а другие люди есть до для ничего для java script а есть другие. Люди и мы периодически обсуждаем с моими коллегами которые занимаются. К рутинами anges и в нытве каким образом:

Нам обобщить код в военных брендах но из-за того что ну из-за определенных: Специфичных вещей в онлайне нге а мы не можем пока генерировать код один раз использовать этот сгенерированный код во всех брендах но он наверное это изменится где-то. К 16 или 17 а что за новые и are back and also это слово произносят что я думаю!

Не все это знают и можем немножко поподробнее рассказать. Да ну сначала когда котлин появился он был ну как бы the java и он торги тел только джем и соответственно. Там был только один backend джоуи явный потом туда добавили еще д.с. и самый последний backend который.

Мы поддержим это не тиф то есть у нас возник зоопарк викендов которые делают одно и то же фактически они преобразуют от церкви синтаксическое.

Дерево в код и они делают это примерно одинаково ну в некоторых местах поэтому возникла гениальная идея а давайте. Вот эти вот повторяющиеся части мы объединим в одну и будем использовать. Их во всех бедах а не распылять силы для того чтобы.

Переписывать одно и то же для викингов и вот то общая часть мы ее назвали а я рф от английского интермедиат репрезентация! То есть преувеличенное представление которые у нас между as там и сгенерированным кодом a state of truck синтаксическое?

Дерево это то как компилятор представляет себе программу и еще такое важное замечание что backend тут имеется. Ввиду не до сервер которого скота backend. Это именно то есть то что приводит язык например для котлин.

Kotlin

Желаем это исход лена futaba байт-код то есть фактически то что лежит под капотом у компилятора если обобщить то компилятор делать.

Делится на обычно две части фронт-энд который. Разбирает программу и строит абстрактные синтаксическое дерево а также выводить типы и тому подобное и backend который.

По этому относитесь к токсическому дереву генерирует код иногда еще туда? Вносит middle and который стоит между брендом и фронтэнда и который занимается оптимизация my но в колпинском компиляторе оптимизация.

My занимаемся мы либо на оба кенте либо оптимизации не занимается и любим случайные тела мире разработке языка и frontend свой и бэкон сейчас поехал потому. Что когда вот я за разработкой клиентской да у нас front-end и back-end это совсем другие. Вещи если бы ты вот когда piracy это услышал я подумал немножко по другим не как trigger такое было как бы сер как какой сервер в коконе.

То есть потом да там уже подробнее стола и стала все понять давай тогда:

Двигаться дальше смотри в чем есть такая штука очень наверное классная и ты разрабатываешь язык то есть ты разрабатываешь продукт:

Не для у каких-то простых людей скажи мне конечных пользователей а именно разработчиков то есть люди которые но больше. Понимают а всем этом как это происходит и наверное более привередливый порой потому что команда не понимаю. Что компания вас не огромный там не тысячи человек работает над код ли нам но проект довольно популярный из все хотят.

Там все больше фичей все больше всего ты чтобы он был стабильно что вы там делали все очень классно его чувствуется ли у тебя какой-то груз? Ответственности что твоя работа там очень важно то есть плане и того именно как высока цена ошибки так и того что твоя: Работа там на самом деле то есть разработчики и множество разработчиков пользуются этим языком.

В мире то есть ты имеешь не прямое отношение.

Скажут что я разработчикам языка котлин из жжет brains то там тебе пиво ставят баре ну с таким конечно я не сталкивался! Но вот то что мои клиенты это программисты:

Это мне очень сильно помогает просто потому что и когда я работал.

Enterprise разработчиков там у нас были отдельные люди под названием бизнес-аналитики которые. Хотелки клиентов переводили на язык спецификации которые мы как разработчики можем понять. Когда ты пишешь для программистов а тебе вот этот дополнительный слой он исчезает естественным образом и соответственно.

Исчезают любые искажения информации которые могут произойти из-за бизнес-аналитиков это я говорю.

Не для того чтобы опустить бизнес-аналитиков я вот перед ними преклонялись.

Потому что я так не могу и вот это пожалуй одна из причин почему я до сих пор отрабатывать компиляторы по поводу.

Того если груз ответственности я честно говоря его особо и не замечаю потому. Что ну их разрабатывал и гтц и арт и вот случае с артом например ошибка была гораздо.

Больше если ты ошибся в арте то единственный ну и этот кот попал. На устройство пользователей то единственный способ исправить ошибку это перо и апдейт аферу в обед это ну наверное.

Сам понимаешь обновить прошивку на всех устройствах во всем мире это очень сложно в случае с картинами тут ситуации города проще потому.

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

Не у меня не перед глазами и это раздо проще чем art ну и плюс то что языком!

Действительно пользуется то что у него есть пользователи это наоборот дает силы и мотивацию вот продолжать заниматься. Тем чем я занимаюсь продолжать сидеть часами в отладчике пытаясь понять.

Где там что не так и как это исправить а вот по поводу багов у тебя есть такие баги которые висят очень долго который. Тебе все хочется дойти до них но не получается потому что появляется что-то более приоритетное прочим то есть вот как как долго.

Вас бывает что боги могут висеть там несколько месяцев ну самый.

Долгий баг который на мне висит по моему ему. То ли три три три с половиной года то есть он был в самой первой экспериментальной версии к рутин? И он до сих пор висит и табак про то что крути на должна очищать свое внутреннее состояние.

Как можно скорее я его хочу поправить но сейчас более приоритетные то подержать к рутины новым. А я на букинге потому что в 14 мы хотим чтобы этот а явный. Букет можно было использовать в качестве замены старого бэкенда это классно давай мы еще за день такую тему jetbrains.

Такая компания довольно популярная я думаю когда я начинал android разраба разработку 10 лет.

Назад я помню что начиналось с их лица вот тогда продукты jetbrains! Были платными их к мнению зале ну либо моей сфере было.

Так я пробовал перейти на идею но принципе с 2013 года насколько помню: Google перешла на идея точно сделал android studio фактически. Идея под капотом все jetbrains стало очень этой компании потом они сделали копли но эта компания.

Coroutines

Которую разработчиков в принципе вызывает уважение и я думаю многие люди бы хотели поработать такой компании вот набраться. Опыта вырасти как того даже банально делать какие-то продукты которыми действительно.

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

Вот каким образом ты попал в jetbrains и дать какие-то может советы что нужно учить там не может нужно носить.

Алгоритмы за прочие там либо наоборот быть душой компании ну по поводу того. Как я попал жить без история очень производительные в команде картина открылась. Вакансия мне which are написала письмо ссылка на эту вакансию я в ответ отправила резюме потом было техническое собеседование посетив несколько собеседования.

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

Я предоставил и я пришел таким образом через что такое андрей спросил у себя ну скажем я к сожалению не могу подробно рассказать потому? Что это но это было связано с технологиями ли это были какие-то вещи там абстрактные то есть либо: Там вопрос который тебе вообще поставил в тупик ну а по поводу да там были вопросы которые меня поставили.

В тупик но я к сожалению не помню это было 21 ческий или нет это собеседование было совсем. Не техническая там скорее он спрашивал о том ну типа кем я хочу стать через пять лет но бог другими. Целования так чтобы я не понял что на самом деле вас прожит о том кем я хотел стать из 5 лет ну вот один вопрос который.

Мне закон запомнился это я думаю андре простит меня за то что я раскрываю тот вопрос который он задавать задает.

На собеседованиях он меня спросил что вот есть обычно два типа программистов первые так все суда ментально обдумывают все делают.

Правильно стараются не допустить никакой ошибки вторые программисты они наоборот скажем так экспериментаторы которые сначала что-то. Сделают мы пытается что-то сделать смотрит получилось ли и интегрируется начиная с этого? Фундамента и он спросил какому типу я себя отношу ну на что я ответил что этот.

Это зависит от того как скорый релиз если релиз очень скоро то я превращаюсь экспериментаторы? Между релизами можно всё поправить привести в какой-то построить какой-то:

Фундаментальный модель чтоб потом можно было перед релизом все так же вы находите а по поводу второго? Вопроса какие советы я могу дать что учить ну так как я собеседовать в команду бэк-ту-бэк нтк тлена я могу дать советы моим потенциальным или возможно даже будущим. Коллегам которые также захотят писать джим букет как.

Кино ну во-первых надо уметь читать байт-код это это уж точно и желательно. Знать как работает живым включая то как работает арт во вторых надо знать алгоритмы а именно алгоритмы на графах:

Потому что ну это то с чем приходится работать буквально.

Каждый день я уже не помню сколько раз я написал обход в глубину и а под в ширину в своем. Коде и каждый раз я писал просто попоить с нуля просто потому что один раз напишет и дальше переиспользовать не к сожалению. Не получается ну и речи если не получилось с первой попытки то устроиться:

Попытаться устроиться в либо в другой проект либо в другую.

Команду потому что все индивидуально и зависит и как от команды так и от конкретного со беседующего возможно? Вы просто не понравились save следующему и следующий раз повезет! Вот например один мой бывший или выше и теперь уже текущей коллега!

Который хотел критичную команду и собеседовать с романом елизаровым. И получил отказ в итоге пришел в команду в ядре и теперь всеми силами пытается войти в библиотечную. Команду вот а переход между командами у нас устроен очень хорошо то есть для того чтобы перейти в другую команду вам надо только?

Два согласия свое и человека ну и да вон и начальника той команды куда вы хотите прийти вам не надо же разрешение своего текущего?

Начальника но без романы елизаровым сро не обойтись в этом случае да он как бы стран столкнется с тем же человеком. В итоге хорошо давай тогда пересекать ближе к теме нашего выпуска смотри прокрутим и часто такая штука есть говорится. Что картину легкий с ними кот ты пишешь синхронном.

Стиле а под капотом все короче надо просто call бейки под капотом вот настолько ли все это прям легко и действительно так прям просто как кажется либо это.

Такая знаешь более простая allegory тому как все это происходит и как нырнуть! Ну-ка человек который это под капотом пишу знает как никто лучше ну по поводу того что кручины то колпаке могу сказать:

Что это совсем не так это настолько. Далеко от правды насколько это может быть и я примерно представляю откуда это взялось потому что роман елизаров на паре своих докладов говорил. И показывал код который генерируется компилятором с дополнительным параметром окончании шин и говорил что можно представить как континент.

Как просто call back он еще отталкивался того что он явно показал когда вот первые были доклады прикручены он показывал. Что вот у вас есть там колбаса что это может там прирастать? Вообще невероятно что типа что сделать если обряд колба крылу братья чтобы за него на сгенерил компилятор.

Вот и в итоге то есть вот так! Итак типа был переход платный к рутинным. То есть фактически что под капотом эти как бы что-то callback подобное но в итоге всё сводится к вас нет нет этого.

Кода виде лесенки ну опять таки это не так кручины гораздо. Сложнее чем мы кубики вот тот к теней шин который я упомянул это на самом деле не всяко рутина потому что крути.

На это во первых очень ёмкое понятие во вторых довольно-таки сложная. И вот я пожалуй разделю это понятие. На составляющие и в виду два определения первое это рутина в общем смысле ее можно ставить как легковесный thread который?

Может прыгать между отрядами операционной системой также как и 3 операционной. Системы прыгать между рядами процессора и при вызове.

Jetbrains

Soften функции внутри со спин функции у нас новой как рутины они создается она задается только когда вызывается либо latch либо осинка а я чаще? Работаю с крути нами в узком смысле.

А к рутину в узком смысле это либо саспенс:

Функция либо со спортом да и крути на в узком смысле это стыд машина и континент. Шин а так вот когда вы переписываете.

Код с колбой камина код с крути нами там в самом конце? Вы передаете кал бег в гору чем и в этом состоит.

К рутин вы вызываете собственной в функцией режим вы из этот.

Кал бег и это пожалуй единственный момент когда крученые колпаки пересекаются под капотом то у нас равно то есть.

Стоит машина чтобы все это было оптимизировано потому что если мы просто. Будем прятать даже банальный возьмем как расколол the roman прячем отеку пакет из как бы срока убыхов пустит: Нападкам на глубину 100 будут тянуться то есть и стоит.

Машина на эффективнее в плане расхода памяти так ведь поэтому или резки это еще плюс и ну прямо так плюсов довольно. Таки на самом деле много это не только избежание callback hello но и вот если сравнить код написанный.

На примерно и рекси с кодом написанным! Накрути нах с циклами s iv ими с войнами ну короче с довольно таки сложным контру.

Flow то код на картинах читается как обычный кот тогда как в случае с рексом.

Приходится вот этот сингл или обзор был сохранять мутабельные переменную и его постоянно обновлять. В этом цикле вызываю на нем какие-нибудь? Операторы rx а эту цепочку да то есть ты строишь.

Как бы цепочку это функциональный стиль подхода там то есть ты строишь цепочку в конце получаешь результат но как бы картина картинами но все?

Равно то есть и картины пришли к этому то есть тот же flow до teen top secret того как ни крутите куда потому. Что есть люди которые вот принципиально говорят вот мне нравится. Делать функциональный подход даже если вот случай когда им нужен такой вот простая синхронной операция.

Как что-то заходить в сеть получить значение вот они все используют rx там сингл да то есть сделать эти штуки все это не просто кажется странным. Единственно что говорю то есть наверное рэкс так вырвался за счет того что он упростил в свое время когда он появился. Он упростил переключение операции на разные потоки и добавил кучу операторов чтобы вот преобразовывать различные вычисления то есть результат получает.

Но в итоге там и видел такие цепочки аж страшно порой становилось у нас даже как-то вот и вали на проекте. Было были баки в рыкса добавлять rx принципе?

Не легко то есть мы просто переписывали на к рутины. Нам было хотя бы проще разбавить вы просто копировали что делали эти операторы просто разворачивали грубо говоря? Все эти штуки и вот тогда нам становилось проще мы понимали находили бак обратно не сворачивали оставляли к рутины могли бы подумать что года.

Что мы свернем обратно нет мы уже оставляли. К руси на но получалось эффективней ну парит по этому поводу я могу сказать следующее.

Я могу привести цитату ярных straw трупа создать: Люси привкус он говорил что программисты хотят сделать те языковые фичи которые они.

С которыми они либо незнакомые либо малознакомый как можно более заметными отец с которыми они хорошо знакомы как можно. Менее заметными так вот если человек незнакомца или мало знакомиться асинхронных и синхронных программированием.

То вот эти вот цепочки и рэкса: Или цепочки теперь уже flow они выделяются из всего остального:

Кода и сразу видно что вот здесь вот у нас асинхронные программирования. Сути скручены минут разница только в ключевом слове со spend a код выглядит. Так же как я обычный кот поэтому?

Top team builder с вот как будто кирпичи ключевое. Слово suspend поездила чтоб джайв его не там найти его тоже котлин этим утром когда он компилируется?

В нативный код джесси их тоже нет в таком но именно в таком виде его что-то он должен превратиться!

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

Функцию написал вот много кода у нее ключевое слово suspend во что она превратится для компилятора ну а оператор сначала во front-end. И когда он выводит чипы и проверять на ошибки то есть на фронте он проверяет что внутри что вот этот вызов этой состоят.

Функции происходит только внутри счас парка текста и после этого он отдает уже построена и дерево в кендо а то что происходит дальше зависит. От бэг-энда например gs и вне тиф где у нас закрытый мир где у нас нету байт-кода который. Лежит в библиотеке и находятся моим центральный который нам надо инлай нить а там inline происходит практически сразу же самом начале бэг-энда и после!

Этого и компилятор джейса и компилятор отметила строит стоит машину и генерирует объект катю меньшим!

А я не помню объяснил я или нет а конечно это просто состояние. Этой картины в данный момент времени а первый континет задает каротин. Builder господин функции будет создан это что я в лавочку до вызову то есть если отличие которое вот создает.

Under the hood

Continued вот эти вот сайты то есть по структуре своей попкой то презентации ли они абсолютно одинаковы только там с разным наполнением:

Зависимость из-за того что состояние меняется к рутины а ну есть ты спрашиваешь отличается ли конечно для spend лямды и для сад подфункции. То ну да отличается для sas петлям мы генерируем кати нешер прямо в объекте!

Лямды а для функции мы генерируем к темнейшим рядом с этой функцией потому что внутри ее мы не можем сгенерировать. Ну и я вот вернуть предыдущему вопросу про то что делать компилятор с этим со спец функциями.

В случае джема у нас из-за присутствия in лайнинга. Байт-кода а мы не можем просто так взять и сгенерировать стек машину иначе мы просто у нас все закончится либо и новинкам? Стоит машину внутри стоит машины что ни к чему хорошему не приведет либо к нескольким составить вызовом в одном стечь?

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

Такая сначала мы проверяем что у нас нет ошибок в коде что мы не вызываем. Со спин функцию извне состоит контекста потом мы online? Cod и только потом мы строим стоит машину разница только в том что мы в наше время не на нем?

Байт-код в байт-код и после этого строим стоит машину она желез и найти мы прямо на а я ли это делаем. Ты вот несколько раз уже упомянул on linen cloth in line там что он разный а вот что именно ты можешь.

Как-то объяснить немножко более вот что это за процессом лайнинга кода ну если коротко то вот у нас есть например! Inline со спид функция и это inline со спин функций можно скомпилировать положить:

Ударник этот жальник запихнуть куда-нибудь момент central и когда мы пишем вызов. Этой inline функции в коде мы эту функцию должны за инлай нить а поэтому мы для этой функции не должны строить стоит машину со звездочкой?

Почему разведчики я объясню немного позже а мы просто должны генерировать как будто бы это обычной функции но при этом пометить! Асфальт вызовы чтобы потом во время построения стоит машины мы могли понять где эти state и внутри стоит машин должны быть расположены: После того как мы сгенерируем байт код функции и с inline.

Ним то есть подставим вместо тела это место вызова функции и тело мы строим финальную стоит машину и для этих машин генерируем катю меньше. А теперь вернёмся к звездочке я сказал что мы не должны генерировать стоит машину потому. Что нам нельзя им на не стоит машину внутри стоит машины.

Но у нас есть еще reflection и java и мы можем вызвать онлайн функции? Через reflection и tired джаву и когда мы вызываем онлайн саспенс функций через reflection там должна быть стоит машина и вот эту от противоречия:

То что у нас и должна быть стоит машина и и не важно быть разрешается методом который.

Я называю w фан мы просто генерируем две копии этой функции одну функцию для in лайнера другую функцию для api слег шина а это всегда: Происходит либо какая-то если пометка есть что нужно для рефлексии генерит скотт это происходит всегда я сейчас не могу вспомнить.

Случае как когда для инвайт со спин функции мы не то просто если удобно в android проекте мы там стараемся избегать рефлексии: Вообще там прям страшно и нам этого.

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

Компилятору что нам нужно для рефлексии поддержка нам не нужна поддержка для рефлексии.

Типа чтобы он помог хотя бы на мой выкинуть то есть и не генерить этот код вероятно что про guard of it какой-нибудь выкосить эти функции но все. Же и а именно собственно мы не делаем что чего-то.

Особенного для android мы надеемся на proguard. Или вот сейчас рейд или что там у них вырезает r5 вырезает этого они фактически тогда туда с гибридной а то есть просто. Типа ты можешь включить 9 он только перегоняет байт-код dex р это на еще оптимизировать умеет то есть она грубо.

Говоря это это разный режим одной и той же тузы?

Ну то есть мы просто надеемся на red или proguard что они вырежут этот код code если они не врезаются: Значит там где там и сохранили ссылку на эту in line функцию и это ну баг в компиляторе уже вот такие баги я стараюсь. Фиксить и стараюсь уделять им особое внимание просто потому.

Что ну и если не пофиксить баг в компиляторе то надо указывать дополнительные правила? Для про горда а это для каждой вот так вот не вырезаны. Функцией давайте утомительно на самом деле но если ты динамический просто про тот же это не сделали классную.

Тулузу нет узла возможность то есть например даже в обычные жарки то есть библиотеки. Можно положить специальный файл который для java библиотеки позволяет ей работать с этим и не писать.

Правило вручную не копировать их там где то не искать а именно он сам сможет их и жаркий. Достать то есть из там специальные папочки по пути он просто.

Все зависимости чекает когда собирает вот и так стало очень классно вот нас а нас пропускать и думаю что будет. Лучше в этом плане ну что про говард еще имеет? Раунды то есть pragmart там проходит сначала находит все которые неиспользуемые есть там ссылки код пунктом функции?

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

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

Наверное вот наверное delay вот дела это такая самарин самая базовая.

Jetpack compose

Функция которую всем показывал suspend 1 в документации. Вот она выполняет просто приостанавливает выполнение картину какое-то время и запускает через какой то промежуток времени вот что происходит!

Под капотом то есть вот у меня есть кто-нибудь там launch внутри долей 5000 миллисекунд: Вот что попасть ходит под капотом вот внутри в эти моменты:

Ну в библиотеке картинок скрути нс реализован event лук и вот у этого ивента. Просто есть очередь заданий который он должен выполнить и intellij он просто засыпает с помощью. Со спид курукин и.в. пока он засыпает он создает в этой очереди задач задание разбуди меня через какое-то.

Время и event log когда он разбирает эту очередь? Он выполняет эту задачу и на вот эту вот continue решение который сохранила.

Вызывает режим и соответственно рутина продолжает свое исполнение давай тогда теперь чуть более хитрый случай подставим мы теперь запустим: Вот делаем тот же самый пример но в к рутину зададим ей dispatcher с одним потоком допустим.

Main поток вот для android приложений которые. Если заблокируется ему будет смерть поставим дело уже не 5 секунд поставим поход корни поставим. Там 20 вот что будет теперь то есть заблокируется ли main поток мозг можно можно ли будет это время на нем что-то?

Выполнит и создастся легко то дополнительный поток чтоб все это выполняется рядом если у нас однопоточный диспетчер not тот же main то после того. Как к рутины зачнёт этот dispatcher просто по сути за dispatched на себя другую картину который ждет исполнении но за со спинки лодзь: И вот сатана подробнее к сожалению я не могу сказать потому что я не пишу код яндекс каррутерс.

Ничего не заблокирует самое главное вот а какой-то поток дополнительный. Который отвечает за обработку от этой ну этого глупо для задач то есть диспетчер задач какого-то для картин? Если то есть дополнительные какие-то нагрузки вне dispatcher of которые.

Какой-то системные управляющий пул потоков или что то есть либо все что вот мы строго сдаем. Диспансере только то и может использоваться это зависит.

От того как ты напишите splatter потому что тот же dice потир он просто скажем так каждый dispatcher он реализует. Can теней шин interceptor тот тот интерфейс который есть стандарт библиотеки.

И этот конечный interceptor содержит только один метод intersect к теней шин который делает ровно одну вещь он берет к рутину снова потока и перенапряг перенаправляет.

На другой как реализован dispatcher это уже как напишешь так и будет он реализован но обычно опять таки тут я могу ошибаться.

Потому что я не пишу код яндекс каррутерс обычно dispatcher. Просто берет если взять тот же dice потер main он сидит на том же главном потоке и просто на этот главный.

Поток pulid с других потоков к рутины. И запускает их вот это вот очередь то что догорел которое задало отвечает. С кем были что нужно разбудить меня.

Боже а вот где она выполняется это вот очередь кто-то же должен следить на каком-то потоки где тоже должно происходить выполнение и тесно тут я не могу! Ответить на этот вопрос лучше поискать по по документации?

Или спросить роман елизарова в публичном стыке окей хорошо пойдем тогда карману потому что самом деле это интересно у всех возникает вопрос. Типа если есть dispatcher вот а где выполняется. Магия которая позволяет обеспечивать вот работоспособность всей очереди вот какой-то.

Капотный то есть пири-пири напротив муж если один поток сейчас нам что-то. Выполняется нужно кто-то разбудить какая-то и скрутим опра водолей вызвало то есть если на одном и том же потоке?

Несколько картин которые сделали обе дела и после долей они что-то делают длинная то есть не заблокировали поток и как strike?

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

И при этом другая картина должна проснуться на том же потоке. То тут уж извините она никогда не проснется это ну как у нас в картинах вытесняющей многозадачности не реализовано только.

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

У вас если suspend функция вызывается таким образом током я могу я там в компиляторы компилирует в конечный. Код немножко по другому то есть одним способом если она вызывает другим образом то тогда соответственно! И происходит другая оптимизацию зависимости от случаев чтобы это получалось.

Более эффективно либо по скорости либо просто по потребляем например я точно уверен вас что если у вас вызывается. Запускается к рутина в которой нет ни одной из успел. Функции то вряд ли для неё там создается стоит машину?

То есть да если у нас внутри саспенс! Функции нет других саспенс функции то это значит что она никогда не состояться и это значит.

Что нам не надо строить стоит машину и так как она никогда не состоится нам не надо сохранять ее состояние в кантине шни! Мы также не генерируем единичный мы ее гнилью ну просто как обычную функцию она даже перестает быть как рутины.

И в узком смысле которые я напомню просто должна быть стоит машиной с к теней шина ты можешь. Заметить и suspend компилятор за нас исправить ну в некоторых языках.

Кстати так и сделано например вот в год там все функции они по сути окей а вот какие-то кейсы. Вызовут у меня suspend функция не вызывается другая. Suspend функция если тут какой-то то есть алгоритм по которым вы определяете где эта функция вызывается каким образом тогда.

Соответственно изменять как будет генерироваться состояние при я я помню был документам спецификации потому как это происходит я помню что там были. Случаи когда suspend функция вызывается прямо в retour не была какая-то оптимизация если то есть если вот какие-то такие еще. Кейсы вот про этот кейс съедобным тоже было бы интересно услышать если у нас функции внутри соткан функции?

Compiler

Есть только один спринт вызов и этот саспенс вызов.

Находится в хвостовой позиции но и знаете что возвращаемые значения этого spend вызова мы возвращаем и при этом никакого вычисления. После этого вызова нет то это значит что у нас фактически только одно состояние ну то есть одно место где мы можем заснуть?

И в таком случае не имеет смысла строить тоже стоит машину потому что состояние это одно и.

Мы также не гинер у и мстит машину и не генерируем к темнейшим это называется толкал оптимизация.

Оптимизация хвостовых вызовов и она нужна если у нас допустим саспенс функции.

Вызывается в цикле дело в том что при вызове саспенс функции мы создаем объект к теней шин и задание этого объекта.

Она не бесплатно как для процессора так и по памяти. Ну и gc мы нагружаем разумеется поэтому если мы можем избавиться от локации этого объекта.

То есть случай толкал оптимизации мы избавляемся и от стыд машины:

И откате нишино следовательно от локации этого кантине шина то мы просто выигрываем.

Но там случае например слов мы выигрываем где-то 30 процентов что ли я не помню точные. Цифры но но я ну вот что все понимали что flow сейчас если брать реактивные. Подходы с тем же rx давай и project реактор flow самый быстрый причем.

Я такой плов еще не совсем доведем до конца как бы там еще есть что найдем ведутся работы. Какие то уже часть api конечно вышла: Стал чаще в экспериментов но я так понимаю что нужно что-то.

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

Где они составляют вызвали suspend функции и то есть соответственно! Повлиять и этим качества того как будет сгенерирован код это не всегда возможно ну то есть и иногда все-таки необходимо чтобы круче назад. Состоялась в таком случае мы просто не можем проводить толкала оптимизацию?

Но в остальных случаях опять-таки это я пытаюсь покрывать различные случаи в этот: Цикл оптимизация например если у нас есть ли черный воин и в этом плане во всех ветках есть. По одному suspend вызову этот софт функции достаёте suspend вызовы находится хвостовых.

Позициях в рамках этого у яна то такие кейсы я покрываю? Но не используйте используйте его я думал о н достаточьно классная вы же буквально недавно был разочарован так немножко потому что есть такая?

Штука фото никак сил классы такие нами настрой до которых ты тоже можешь перебрать!

Войны через из там пройтись по всем типам велса писать.

Не нужно потому что других подклассов там быть не может если свейном эта фича работает lf-lc нет то есть это: Вот я так такой как бы типа грустно хотя по сути под капотом. Верно уэн это же тоже тот же flc есть ну да на самом.

Деле что уэйн что и files это на самом деле проверку условий и прыжок ну просто вен дает больше.

Гарантий на уровне котле на да и я тебе скажу.

Что в а яре у нас iv реализован there'sa воин прикольно iv реализован?

Через вин который снова перегоняется в iv ну он не пригодится. В ifhone просто перегоняется проверку условия и прыжки и все мы уже говорили про новый backend компилятора. Калиновского накоплен con в кинулся андрей прислав рассказывал.

Про том что там они делают что у вас он переписываться не стоит! Целью чтобы дать там 10-15 процентов а чтобы дать там хороший мощный скачок и в плане производительности компилятора в том чтобы добавить.

Возможно реализации свечей который давно просят но которые были заблокирован например там был вершин для интерфейса в котле. Некоторые все не могли сделать то есть вот как раз та из-за ограничений которые были на уровне компилятора там даже был человек?

Который это все пропихивать он и там пуму пять лет висел этот парик в этот запрос. По пище да и наконец-то с новым:

Брендом он дойдет вот он в 14 уже до объявили что будет эта фича что ждет нас с новым брендом для крутим. Получим ли мы не знаю более эффективный. Код может больше скорости может больше возможности для какого-то.

Дальнейшего развития роста то есть что нас ждет вот с приходом нового агента для картин но с приходом нового бренда для для крутин изменится.

На самом деле довольно таки мало потому что опять-таки у нас есть онлайн. Функции и мы не можем а я рид строить стоит машину поэтому к сожалению приходится. Переиспользовать на те оптимизации которые сделаны на ну в старом пк энди и строить стоит машины также!

Втором пакете но если кстати онлайн не используется та ну то есть саспенс функция хвостовая не хвостовая!

Как это по-русски to lev ну то есть есть у нас граф вызовов и it's a spin функция? Не вызывает других или иной нет других функций то есть переформулирую если у нас есть обычный! Саспенс функции который не используют ни inline функции не онлайн.

Лямды то тогда мы можем для нее применить. Всю мощь оптимизации на а я ре и я уже могу сказать что я смогу покрыть те случаи толкал оптимизации которые я. Не мог покрыть 2 бэг-энде и код будет работать в таком случае быстрее а так к сожалению.

Я связан по рукам тем что нам приходится. И и на нить подход и нам его еще долго придется поддерживать этот тэн войны подхода я не могу назвать точную точный. Номер версии когда мы откажемся от байт-кода к сожалению наверное это будет где-то с год лин 18 19 может!

Даже позже но это еще не меньше пяти лет до поэтому те улучшения.

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

Себя как бы загонять в итоге плохое?

Положение ну в общем в 14 g в empire ну новый бренд будет поддерживаться но он не будет основным. Он будет поддерживаться с ключом который сейчас называется. Минус x джива empire возможному его переименуем но скорее всего не так времен режиме короче запускается до в эксперимента:

Режиме и будет довольно таки долгий период стабилизации этого бренда возможно этот период.

Стабилизации продлится всего лишь один моральный релиз 14 а возможно он будет по умолчанию но опять-таки в экспериментальном:

Режиме в 15 возможно он не будет опять таки по умолчанию и будет умолчанию! Старый boot and 15 посмотрим поэтому я не могу ничего сказать по поводу будет ли закончили поддержку старого бэг-энда в ближайшее. Время у вас вообще много людей но трудиться.

Над новым брендом то есть на него много сил переключили. Да над новым брендом трудятся вся команда джона бренда три человека минске ни один человек в питере?

Один маски но смотреть того что ты говоришь из твоих слов я прекрасно вижу что как бы вся команда джимбо кем-то трудиться над новым брендом для. Компилятора в принципе сейчас они много говорят то есть андрей прислал говорил о том что в 14 в 15 тонн.

Там постепенно будет входить новый компиляторы как учитывая что он повысит производительность позволит эффективнее переиспользовать бэг-энде компилятора между различными платформами джиджи.

Горджес немцев я так понимаю этот общему. Смыслу что multi-platform сейчас фактически этого то чему идет котлин то есть это его такой честно domain.

Parked чтобы подойти вывести какой был ее на и tiff и gif и tiff уже в бете причем?

В долгой б синопа под очень активная. Разработка еще джорджи в манеже стебли либо просто!

Что сейчас остается в мотиве и в multi-platform: Свести все это и вопрос вот касательно!

К рутин то есть я совсем недавно увидел что наконец-то свершилось. То чего так долго ждали что на ней тебе картины стали работать вне главного потока: В официальной библиотеки они с какими то там решениями.

От людей из сообщества вообще вот сейчас.

Общаясь со своими коллегами кто делают к рутинно других платформах ты как-то чувствуешь. Что вот этот пошел mainstream в то чтобы объединить:

Это все чтобы сделать multi-platform завести как можно быстрее до более того я даже review. Код который объединяет коды генерацию вгс и в нытве в что-то общее ну то есть по сути в один проход андрей!

Бреслав чем говорил что сейчас получается что на этих она уже? Пилится только под новый backend компилятора то есть от же с живым так исторически?

Сложилось что они были раньше ничему старым 50 наверно.

Да я так понимаю что сейчас в этом свой из фактической князеву замечательно на самом деле то есть multi-platform! Я думаю это будет достаточно интересная альтернатива.

Когда с ребятами говорю то есть как положительные кейсы когда у людей получается приложение не выпускают из компании: Активно это делают мы на эту тему записывали подкаст с ребятами и за срок говорили.

Вот про их опыт но из как бы люди те кто скептически верят! В котле не типа что говорят там еще работы на пять лет вперед чтобы догнать.

Я не бог я тебе скажу что такое работы в любом покиньте на там десятки лет вперед ну потому что всегда есть места где:

Хотелось бы сделать что-то по-другому или хотелось бы что-то улучшить и эти места постоянно находятся на них постоянно. Не хватает времени ну по поводу вот круче на разных?

Платформах да вот до недавнего времени в нытве нельзя было передавать в другой поток не дав лыжные объекты и в эти туфли.

Жены и объекты нельзя было записывать что угодно а к рутины они свои локальные переменные записывают в к темнейшим то есть сохраняют свои состоянии потом этот. Континент не передается на другой поток и на другом потоке к рутина опять?

Таки может записать свое состояние катю ней шин в нытве то естественно закатилась крышам то есть попыткой записи? В дав режимный объект сейчас конечно передается низов режим и библиотечная команда с радостью. Начала там наращивать мясо на вот это вот появишься поддержки мы подачи скрутим к сожалению подобные нельзя сказать!

Про джесс по очевидным причинам там джесс всегда один поток ну да но там уже имеется ну что идет какое-то движение уже даже решает потому. Что на самом деле даже проблемы к рутинное оси было из-за который может как скажем приходилось использовать. Другие решения и которые нельзя то есть вопрос следующим у меня еще есть очень интересный?

Конечно же каким-то образом вы занимаетесь оптимизацией картин под android под арт возможно компилятор под какие-то другие особенности может вы иметь какое-то отношение.

Дополнительные материалы

Хештеги:
Поделиться или сохранить к себе:
Моя Мотивация