@scala_ru

Страница 1284 из 1499
Р
13.02.2018
06:52:58
https://github.com/scala/scala/blob/c2a5883891a68180b143eb462c8b0cebc8d3b021/src/library/scala/collection/immutable/List.scala#L141 можно на эту тему еще с Одерски посраться
Это же стандартная коллекция, там супер оптимизация очень очень очень важна.

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

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

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

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

Nick
13.02.2018
07:14:48
JIT тоже не заинлайнит
Оу оу, откуда инфа )

Oleg
13.02.2018
07:31:12
Зачем может понадобиться var?
могу другой кейс привести

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
да, их 8
А, я думал ты про вальхалу

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

Daniel
13.02.2018
07:39:42
инлайны лямбд и дефорестейшны? есть
т.е. он может неограниченно специализировать? (речь выше была про фолд в коллекции, поэтому подразумеваю параметрический полиморфизм)

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

Oleg
13.02.2018
07:41:13
т.е. он может неограниченно специализировать? (речь выше была про фолд в коллекции, поэтому подразумеваю параметрический полиморфизм)
если под специализацией подразумеваются unboxed фигня - то GHC не будет делать специальную версию unboxed коллекции, скорее он сведёт выражение к той форме, где можно будет не боксить

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

на уровне тайпклассов при мономорфизации, он конечно-то же сведёт к анбоксед вызовам при инлайне

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
В скале ж тож эт макросом можно сделать)

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
мета != макрос
Дык эт к разговору что можно в скале сделать . Ну и мне кажется, что макросом тоже можно

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
Пока нет тоталити чеккера, ничего и не придумаешь

Oleg
13.02.2018
08:05:23
Не, ну стопэ) вилка и ложка для разных целей, а котлин и скала мало того что языки общего назначения, преднахзначены для одного и того же, так еще и на одной VM построены...
Не, ну стопэ) котлин и скала для разных целей, а вилка и ложка мало того, что столовые приборы общего назначения, предназначены для одного и того же, так ещё и из одного металла выплавлены...

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
Пока нет тоталити чеккера, ничего и не придумаешь
переделать в цикл и надеятся на loop unrolling %)

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

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

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

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

Nikolay
13.02.2018
08:09:47
Эх, чатик тролей как всегда)
больший тролинг - сравнивать котин со скалой в этом чатике раз так в десятый)

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
я вот паралельно скале немного в котлин погружаюсь и действительно интересно - почему он не взлетит?

Страница 1284 из 1499