
Р
13.02.2018
06:52:58

Alexey
13.02.2018
06:54:07
Знаю только один кейс - поздняя инициализация чего-либо. Но использую для этого Promise + lazy val
Скажем так например есть задача проагрегировать милион элементов каким нибудь образом. Ты скажешь - возми fold и агрегируй наздоровье, а потом я скажу тебе а ты зайди в реализацию фолда на какой нибудь синхроинной коллекции и сюрприз сюрприз, там будет var. Ну и еще в отличии от котлина функции переданные в fold не будет заинлайнена и получится оверхед еще и на создании стека и вызове функции
Вобщем рассуждения про ненадобность чего то что есть в языке очень оторваны от реальности

Kirill
13.02.2018
06:58:42

Google

Kirill
13.02.2018
07:00:21
А то прямо атмосфера #scalaz на фриноде в былые времена

Alexey
13.02.2018
07:04:55
Ну я могу и на личности перейти если стало слишком лайтово

Nick
13.02.2018
07:10:09

Alexey
13.02.2018
07:13:58

Nick
13.02.2018
07:14:48

Oleg
13.02.2018
07:31:12

Alexey
13.02.2018
07:31:45
Оу оу, откуда инфа )
Тут конечно зависит от того чей фолд надо заинлайнить, но если ты вызываешь у Seq, то jit точно не сможет сказать какой метод надо инлайнить, да и инлайн анонимных классов вроде тоже попаболь

Oleg
13.02.2018
07:33:00
говножавка не умеет вэлью тайпы размерности больше 64 бит, поэтому если тебе нужны какие-то вычисления на 128\256 или произвольной размерности, и ты не хочешь аллокаций на каждый чих
Ты юзаешь либо мутабельные массивы, либо объекты с var
Как пример ( не настаиваю на офигенности решения) - вычисление murmur для 128 бит.

Nick
13.02.2018
07:34:31
А что у Джавки есть велью тайпы?

Oleg
13.02.2018
07:34:48
byte, short, int, long, float, double, boolean, char

Google

Alexey
13.02.2018
07:36:17
глядишь скоро будут структуры

Nick
13.02.2018
07:36:18

Daniel
13.02.2018
07:36:48
Вобщем тут тебе не хачкель
сомневаюсь что там есть такое
динамическая диспетчеризация в той же жвм может инлайнится, если жит найдет не более двух специфичных вызовов

Oleg
13.02.2018
07:38:34

Daniel
13.02.2018
07:39:42

Nick
13.02.2018
07:40:43
Мне кажется, что там нельзя ничего конкретно утверждать от версии к версии

Oleg
13.02.2018
07:41:13
скажем, если ты сделаешь чото типа sum [1..100::Int] - здесь боксинга не будет, но не потому что там список будет специализированный, а потому что списка не будет
на уровне тайпклассов при мономорфизации, он конечно-то же сведёт к анбоксед вызовам при инлайне

Andrey
13.02.2018
07:46:55

Alexey
13.02.2018
07:47:16

Grigory
13.02.2018
07:47:17
отсюда и вары ну вы понели

Alexey
13.02.2018
07:47:32

Nick
13.02.2018
07:48:31
Обожаю го

Oleg
13.02.2018
07:49:13
а котлин умеет лямбды инлайнить?

Alexey
13.02.2018
07:49:53
в компайл тайме

Oleg
13.02.2018
07:50:59
а как он это делает?

Andrey
13.02.2018
07:51:31

Google

Oleg
13.02.2018
07:51:50

Alexey
13.02.2018
07:52:04
а как он это делает?
как то так
inline fun foo(inlined: () -> Unit, noinline notInlined: () -> Unit) {
// ...
}
На ровном месте он наверное ничего не инлайнит
вобщем тут все кейсы
https://kotlinlang.org/docs/reference/inline-functions.html

Nick
13.02.2018
07:53:18
Инлайн в байт-коде
Эх

Oleg
13.02.2018
07:54:13
The inline modifier affects both the function itself and the lambdas passed to it: all of those will be inlined into the call site.
Inlining may cause the generated code to grow
ясно

Nick
13.02.2018
07:55:01
В скале ж тож эт макросом можно сделать)

Alexey
13.02.2018
07:55:27

Oleg
13.02.2018
07:55:59
нет
а мне тоже кажется, что можно

Nick
13.02.2018
07:56:24
нет
Че нет то , в скала мета даже пример был )))

Alexey
13.02.2018
07:56:46
мета != макрос

Oleg
13.02.2018
07:56:53
ну точнее, знаю, что можно

Alexey
13.02.2018
07:57:19
Зависит от порядка компиляции

Oleg
13.02.2018
07:57:27
просто нужно написать макрос, который будет генерить макросы, которые будут инлайнить лямбды
но, в общем, это и у нас почти есть
http://dotty.epfl.ch/docs/reference/inline.html

Nick
13.02.2018
07:59:10
мета != макрос
Дык эт к разговору что можно в скале сделать . Ну и мне кажется, что макросом тоже можно

Alexey
13.02.2018
07:59:43

Google

Daniel
13.02.2018
08:00:23
интересно что будет с инлайнингом рекурсивной функции

Oleg
13.02.2018
08:00:35

Daniel
13.02.2018
08:01:36
ничего хорошего или задетектит и проигнорирует?
у хацкелля есть анализ для этого
Note: Do not apply INLINE pragmas to loop-breakers, GHC will never inline a loop breaker regardless of which pragma you attach. In fact, with a debugging compiler, core lint will warn about using an INLINE pragma on a loopbreaker.

Oleg
13.02.2018
08:02:38
Inline methods can be recursive. For instance, when called with a constant exponent n, the following method for power will be implemented by straight inline code without any loop or recursion.

Alexey
13.02.2018
08:02:52

Oleg
13.02.2018
08:03:37
Но вообще, это понятно, что решение так себе
Это как рекурсивный макрос. Подвесишь в худшем случае компилятор

Andrey
13.02.2018
08:03:59
А в целом вилка лучше ложки?
Не, ну стопэ) вилка и ложка для разных целей, а котлин и скала мало того что языки общего назначения, преднахзначены для одного и того же, так еще и на одной VM построены...

Oleg
13.02.2018
08:04:09
Пока нет тоталити чеккера, ничего и не придумаешь

Alexey
13.02.2018
08:04:45

Andrey
13.02.2018
08:05:10

Oleg
13.02.2018
08:05:23

Alexey
13.02.2018
08:05:48

Andrey
13.02.2018
08:06:09
Эх, чатик тролей как всегда)

Oleg
13.02.2018
08:06:19
Да ты чепуху сказал
Котлин и скала для одного и того же

Andrey
13.02.2018
08:07:02
Почему? вилкой не получится есть суп, что можно делать котлином на jvm, что нельзя делать скалой на jvm ?
Чепуху вы говорите)

Daniel
13.02.2018
08:07:51

Google

Oleg
13.02.2018
08:08:05

Р
13.02.2018
08:08:40
Если кому-то интересно могу рассказать почему Котлин полный отстой и не взлетит, а Скала няша и уже взлетела.

Alexey
13.02.2018
08:08:59

Andrey
13.02.2018
08:09:09
Эх тороли тролики)) Так бы и сказали что котлин здесь табу)
А так хотелось узнать реальное мнение человека знающего котлин и скалу не по хеловорлдам...

Oleg
13.02.2018
08:09:15
Что нельзя делать JRuby, и Etа и JS\Nashorn на JVM что можно делать скалой?

Александр
13.02.2018
08:09:19

Nikolay
13.02.2018
08:09:47

Oleg
13.02.2018
08:09:55

Andrey
13.02.2018
08:10:04

Oleg
13.02.2018
08:10:04
А "реальное мнение" - повторяющее твоё
спросил какое-то говно, так ещё и теперь высокомерно аргументы критикует
Давай-ка аргументы, что они в одной нише не на уровне "они для одного и того же и на одной жвм"

Aleksey
13.02.2018
08:17:16
Давайте заканчивать срач

Oleg
13.02.2018
08:17:23
нет

Artem
13.02.2018
08:18:28
я вот паралельно скале немного в котлин погружаюсь и действительно интересно - почему он не взлетит?