Size: a a a

Scala User Group

2020 August 08

EB

Eugene Bosiakov in Scala User Group
только обычная рекурсия забьет стек и убьет перфоманс, используй tailrec, компилятор внутри ее соптимизирует в обычный цикл
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Dmitry Belyaev
Всем привет! Смотрю курс по Scala на udemy, и лектор сказал такую вещь: в скала ВСЕГДА используйте рекурсию вместо лупы. В интернете объяснения этому не нашёл. Можете объяснить, почему так?

Если надо могу скинуть ссылку для референса. Спасибо!
думаю, что всегда, когда кто-то говорит "всегда делайте так", нужно относится к этому с толикой скепсиса
источник

DB

Dmitry Belyaev in Scala User Group
Eugene Bosiakov
луп = мутация, а скала про иммутабельность
А окей, он в начале говорил что надо стараться использовать val, а не var) А почему скала про иммутабельность? Это связано с повышением перформанса программ?
источник

DS

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

DB

Dmitry Belyaev in Scala User Group
Eugene Bosiakov
только обычная рекурсия забьет стек и убьет перфоманс, используй tailrec, компилятор внутри ее соптимизирует в обычный цикл
Сохраню это себе, пока ещё не добрался до этой части)))
источник

EB

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

DB

Dmitry Belyaev in Scala User Group
Oleg ℕizhnik
думаю, что всегда, когда кто-то говорит "всегда делайте так", нужно относится к этому с толикой скепсиса
Ясное дело, вопрос к самой рекомендации
источник

EB

Eugene Bosiakov in Scala User Group
Dmitry Belyaev
А окей, он в начале говорил что надо стараться использовать val, а не var) А почему скала про иммутабельность? Это связано с повышением перформанса программ?
есть несколько эссе на тему проблем мутабельности, в двух словах легко ввести в заблуждение
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Dmitry Belyaev
А окей, он в начале говорил что надо стараться использовать val, а не var) А почему скала про иммутабельность? Это связано с повышением перформанса программ?
нет, это связано с повышением качества кода
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Древние боги обещали, что когда-нибудь иммутабельность может служить средством повышения перфоманса, но пока что, кроме SSA в LLVM таких средств не найдено
источник

EB

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

DB

Dmitry Belyaev in Scala User Group
Спасибо большое за такие подробные разъяснения! :) Буду писать иммутабельный код xD
источник

EB

Eugene Bosiakov in Scala User Group
Oleg ℕizhnik
Древние боги обещали, что когда-нибудь иммутабельность может служить средством повышения перфоманса, но пока что, кроме SSA в LLVM таких средств не найдено
я думал иммутабельность только снижает перфоманс, а компиляторщики за него героически сражаются
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Eugene Bosiakov
я думал иммутабельность только снижает перфоманс, а компиляторщики за него героически сражаются
связь не такая монотонная
источник

EB

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

Oℕ

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

Oℕ

Oleg ℕizhnik in Scala User Group
Ну помимо SSA, я ещё могу вспомнить CAS\Atomic и определённые СУБД
источник

Oℕ

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

EB

Eugene Bosiakov in Scala User Group
Oleg ℕizhnik
Ну помимо SSA, я ещё могу вспомнить CAS\Atomic и определённые СУБД
мы же люди простые, нам бы дерево построить, строку собрать из частей, операции над массивом погонять
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ну всем трём случаям иммутабельность никак не мешает в плане перфоманса
источник