Size: a a a

Scala User Group

2020 August 08

EB

Eugene Bosiakov in Scala User Group
Но это же от того что компиляторщики постарались и когда делаешь добавление элемента к массиву он не аллоцирует новый кусок памяти и создает новый объект, а просто в памяти мутирует уже существующий
источник

EB

Eugene Bosiakov in Scala User Group
То есть под капотом появился слой магии, который чего-то стоит, еще и не всегда понятен
источник

Oℕ

Oleg ℕizhnik in Scala User Group
а в какой момент под капотом не стояло непонятного слоя магии ради перфоманса?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
в 60-х?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
я родился в 85м, всю мою жизнь стояло
источник

EB

Eugene Bosiakov in Scala User Group
аргумент
источник

λ

λoλcat in Scala User Group
Sergey Alaev
Кто-нибудь может напомнить, чем
def foo(ctx: Ctx): F[A]
принципиальнро хуже
def foo(implicit ask: ApplicativeAsk[F, Ctx]): F[A]
?
Тем, что в трейтах придется в сигнатуры класть Ctx

А во втором случае - это деталь имплементации
источник

S

Simon in Scala User Group
Denis Semikin
Возможно я ошибаюсь но не любую же рекурсию можно tailrec'ом превратить в цикл
зато любой цикл можно превратить в tailrec рекурсию
источник

λ

λoλdog in Scala User Group
Eugene Bosiakov
Но это же от того что компиляторщики постарались и когда делаешь добавление элемента к массиву он не аллоцирует новый кусок памяти и создает новый объект, а просто в памяти мутирует уже существующий
1. Компиляторщики не пишут рантайм либы
2. Добавление элемента в массив какой не аллоцирует новый? )
источник

λ

λoλdog in Scala User Group
Simon
зато любой цикл можно превратить в tailrec рекурсию
Не любой
источник

EB

Eugene Bosiakov in Scala User Group
λoλdog
1. Компиляторщики не пишут рантайм либы
2. Добавление элемента в массив какой не аллоцирует новый? )
2 ты о чем?
источник

λ

λoλdog in Scala User Group
О том, что добавление элемента в обычный array это копирование и создание нового
источник

EB

Eugene Bosiakov in Scala User Group
λoλdog
О том, что добавление элемента в обычный array это копирование и создание нового
В скале добавление нового элемента в конец массива приведёт к аллокации места под новый, копирования и уничтожения предыдущего объекта?
источник

EB

Eugene Bosiakov in Scala User Group
Ты уверен?
источник

λ

λoλdog in Scala User Group
источник

NM

Nikita Melkozerov in Scala User Group
Eugene Bosiakov
В скале добавление нового элемента в конец массива приведёт к аллокации места под новый, копирования и уничтожения предыдущего объекта?
у массива нет метода append, только appended который копирует весь массив.
источник

λ

λoλdog in Scala User Group
Ну на то он и массив
источник

EB

Eugene Bosiakov in Scala User Group
Я понимаю что с нашей точки зрения это порождение нового объекта, но разве под капотом это не оптимизируется в мутацию массива?
источник

λ

λoλdog in Scala User Group
Нет
источник

NM

Nikita Melkozerov in Scala User Group
Eugene Bosiakov
Я понимаю что с нашей точки зрения это порождение нового объекта, но разве под капотом это не оптимизируется в мутацию массива?
в ArrayBuffer да в Array нет
источник