Pull to refresh

Comments 15

При помощи чего можно получить такую подсветку?
Как это сделать в Intellij Idea не знаю (хотя можно по идее плагином попробовать).
А вообще такую подсветку можно сделать в Sublime Text, и в нем открывать файл, полученный с помощью javap.
Плагин для подсветки синтаксиса.
В Android Studio пройдите по пути File -> Setting -> Editor -> Colors&Fonts -> Kotlin. На открывшимся экране создайте собственную Scheme, кликните на элемент, цвет которого хотите изменить (Например, Annotation). Справа от списка вы увидите поле для выбора цвета, чтобы его поменять уберите галочку «Use inherited attributes» и вы сможете выбрать любой цвет из палитры. Думаю, что в Intellij Idea будет примерно такой порядок вещей.
Я отлично знаю, как в IDEA редактировать цветовые схемы, но проблема в том, что на картинке язык не Kotlin, а нечто похожее на вывод программы javap. Такой язык IDEA сама не поддерживает и плагинов не нашлось.
Я не спец в java посмотрите может тут есть опечатка
описание метода Object var4
в теле метода var3
   public static void first$default(int var0, long var1, int mask, Object var4) {
      if((var3 & 1) != 0) {
         var0 = 11;
      }
 
      if((var3 & 2) != 0) {
         var1 = 22L;
      }
 
      first(var0, var1);
   }
Да, спасибо, исправил. Была опечатка, должно быть mask вместо var3.
Писал комент не дочитав статью поэтому он тут
Извиняюсь (((

inline в Kotlin сделан не от хорошей жизни, а потому, что JIT не умеет инлайнить лямбды, переданные по параметру. Это своего рода обход известного ограничения JIT. Из статьи же создается впечатления, что разработчики языка недоверяют стандартному инлайнингу. Вполне доверяют, но хотят большего.

Что значит "JIT не умеет инлайнить лямбды, переданные по параметру"?

Промахнулся веткой. Ответил ниже.

Не стоит делать такие утверждения не будучи членом команды, которая принимала design decision о необходимости inline.


1) Inline-лямбды невероятно рулят на андроиде, где без inline приходится под каждую лямбду генерировать анонимный класс, раздувая итоговый размер приложения.
2) Без inline-лямбд гораздо сложнее сделать (и возможно только более ограниченную версию) reified generics и non-local returns.
3) Конструкции с лямбдами в котлине активно используются в качестве очень приятного сахара (классический пример c lock из документации), логично было бы сделать, чтоб такой сахар компилировался в тот же байткод, что аналогичная (и более громоздкая в случае с try-finally) конструкция на джаве.
4) JIT вполне себе сносно инлайнит лямбды. Да, на эту оптимизацию нельзя полагаться; тем не менее полагаться на то, что средний разработчик умеет инлайнить лучше, чем компилятор уж тем более не стоит.
Вот бенчмарк, где JIT инлайнит и метод, и переданную в него лямбду.
5) Было бы странно, если бы решения о дизайне языке принимались только на основании того, что неспецифицированный JIT-компилятор может или не может сделать.


NB: я к дизайну языка никакого отношения не имею

Очень может быть что я и ошибаюсь. Тем не менее я довольно давно слежу за развитием языка. И помню когда появилось ключевое слово inline и какой аргументацией сопровождалось его почвление. Reified, android и т.п. появились позже. Как развитие удачной идеи. Ну и JVM на месте не стоит. Возможно мой опыт устарел. Надо будет освежить.

Что-то не могу найти так сразу ссылку на пруф, но как раз при обсуждении inline с разработчиками Kotlin я и узнал, что ели передать лямбду как параметр метода, то тело метода заинлайнено может быть, а вот тело лямбды уже нет.


Inline Котлина же позволяет явно заинлайнить и тело метода и тело лямбды, которая туда была передана.


Ну а уже потом и reified туда наверну, превратив inkine вообще в киллер фичу.

Да и вообще объём кода, ккоторый пришлось бы написат на джаве чтобы заработало вот это:


        private inline fun <reified S> TypeResolverRegistry.addResolver(crossinline resolve: (S) -> String) = apply {
            registerTypeResolver(S::class.java, { _, obj -> RunUtil.create(resolve(obj as S)) })
        }

ужасает.

А кто знает, как обстоят дела с потреблением памяти?
Sign up to leave a comment.