Size: a a a

Scala User Group

2020 January 10

M

Mikhail in Scala User Group
там не принимает обертку
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Mikhail
там не принимает обертку
речь не о том же
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Михаил, ну ты чё
источник

M

Mikhail in Scala User Group
Oleg ℕizhnik
речь не о том же
ну ты написал, что будет
FooOps.bar(FooOps(foo))
, но это не так) хотя FooOps.apply вызываться и правда будет зачем-то. Надо вспоминать байткод)
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Mikhail
ну ты написал, что будет
FooOps.bar(FooOps(foo))
, но это не так) хотя FooOps.apply вызываться и правда будет зачем-то. Надо вспоминать байткод)
именно так и будет, посмотри javap
источник

Oℕ

Oleg ℕizhnik in Scala User Group
13: invokevirtual #34                 // Method FooOps:(Lmaccc/Foo;)Lmaccc/Foo;
     16: invokevirtual #37                 // Method maccc/Foo$FooOps$.bar$extension:(Lmaccc/Foo;)Lmaccc/Foo;
источник

M

Mikhail in Scala User Group
Oleg ℕizhnik
13: invokevirtual #34                 // Method FooOps:(Lmaccc/Foo;)Lmaccc/Foo;
     16: invokevirtual #37                 // Method maccc/Foo$FooOps$.bar$extension:(Lmaccc/Foo;)Lmaccc/Foo;
все правильно. только 16: не принимает эту обертку и она туда не передается
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Т.е. будет вот такой вызов Foo$FooOps$.bar$extension(FooOps(foo))
источник

Oℕ

Oleg ℕizhnik in Scala User Group
да речь блин не об обёртке
источник

Oℕ

Oleg ℕizhnik in Scala User Group
а о том, что вызов метода конверсии останется в байткоде
источник

Oℕ

Oleg ℕizhnik in Scala User Group
т.е. вплоть до байткода, это будет два разных метода с двумя разными наборами тайп-параметров
источник

λƒ

λesha ƒomkin in Scala User Group
Кстати.
1. От чего не придумали еще какого-нибудь универсального способо инлайнить это хозяйство во время компиляции? Раз уж есть такие замечательные вещи, как better-monadic-for.
2. Почему сам скаловский компилятор не умеет инлайнить такое? Есть какие-то препятствия?
источник

ЮБ

Юрий Бадальянц in Scala User Group
λesha ƒomkin
Кстати.
1. От чего не придумали еще какого-нибудь универсального способо инлайнить это хозяйство во время компиляции? Раз уж есть такие замечательные вещи, как better-monadic-for.
2. Почему сам скаловский компилятор не умеет инлайнить такое? Есть какие-то препятствия?
В дотти будет inline
источник

λ

λoλdog in Scala User Group
λesha ƒomkin
Кстати.
1. От чего не придумали еще какого-нибудь универсального способо инлайнить это хозяйство во время компиляции? Раз уж есть такие замечательные вещи, как better-monadic-for.
2. Почему сам скаловский компилятор не умеет инлайнить такое? Есть какие-то препятствия?
а зачем?
источник

λƒ

λesha ƒomkin in Scala User Group
Юрий Бадальянц
В дотти будет inline
В дотти понятно. В scala2 я тоже могу сделать внутри макроса c.prefix.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
λesha ƒomkin
Кстати.
1. От чего не придумали еще какого-нибудь универсального способо инлайнить это хозяйство во время компиляции? Раз уж есть такие замечательные вещи, как better-monadic-for.
2. Почему сам скаловский компилятор не умеет инлайнить такое? Есть какие-то препятствия?
может инлайнить
источник

λƒ

λesha ƒomkin in Scala User Group
Oleg ℕizhnik
может инлайнить
В каких случаях? Я сколько раз не смотрел сгенерированный код, столько раз видел конструкторы оберток.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
λesha ƒomkin
В каких случаях? Я сколько раз не смотрел сгенерированный код, столько раз видел конструкторы оберток.
Если добавить -Yopt:inline
источник

Oℕ

Oleg ℕizhnik in Scala User Group
но на жвм это не имеет особого смысла
источник

Oℕ

Oleg ℕizhnik in Scala User Group
жит всё равно лучше инлайнит, чем скала
источник