Size: a a a

Scala User Group

2021 January 30

AG

Alexander Galagutski... in Scala User Group
Aλexander Semenov
Класснющие, а val (a, b) = ("a", 2) оптимизируется компилятором, или прям создаётся тупл в рантайме и анматчится?
самого заинтересовало, посмотрел что будет, вообщем если взять такой кейс на скале и запустить с С2 получиться как то так

object TestTupleUnapply {

 def main(args: Array[String]): Unit = {
   test()
 }

 def test(): Unit = {
   for (_ <- 1 to 100_000) {
     val (a, b) = (100500, 100600)
     println(a + b)
   }
 }

}

java.io.PrintStream::println201100@1 (line 821)


 0x000000011fcea6c4: mov    %rdx201100,%rsi
Я до конца синтаксис интовый не понимаю, но судя по результату там contstexpr сработал, и сразу на принт уходит посчитанное значение (так что большинство кейсов должны быть без алокаций для случаев где С2 сгенерировал натив)


UPD
источник

AS

Aλexander Semenov in Scala User Group
Alexander Galagutskiy
самого заинтересовало, посмотрел что будет, вообщем если взять такой кейс на скале и запустить с С2 получиться как то так

object TestTupleUnapply {

 def main(args: Array[String]): Unit = {
   test()
 }

 def test(): Unit = {
   for (_ <- 1 to 100_000) {
     val (a, b) = (100500, 100600)
     println(a + b)
   }
 }

}

java.io.PrintStream::println201100@1 (line 821)


 0x000000011fcea6c4: mov    %rdx201100,%rsi
Я до конца синтаксис интовый не понимаю, но судя по результату там contstexpr сработал, и сразу на принт уходит посчитанное значение (так что большинство кейсов должны быть без алокаций для случаев где С2 сгенерировал натив)


UPD
Спасибо, интересно!
источник
2021 January 31

a

aλeχknvl in Scala User Group
Не вижу связи между erasure и native scala.
источник

a

aλeχknvl in Scala User Group
В языках без специализации на уровне языка можно делать специализацию во время компиляции.
источник

a

aλeχknvl in Scala User Group
Например Rust.
источник

a

aλeχknvl in Scala User Group
Это скорее удобно, т.к. упрощает язык.
источник

a

aλeχknvl in Scala User Group
А вот всякий ООП жизнь только усложняет.
источник

Aλeχ Λisenκo in Scala User Group
aλeχknvl
А вот всякий ООП жизнь только усложняет.
Сабтайпинг в частности?
источник

a

aλeχknvl in Scala User Group
Да, виртуальные функции и vtables
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Так в расте есть виртуальные таблицы
источник

Oℕ

Oleg ℕizhnik in Scala User Group
aλeχknvl
В языках без специализации на уровне языка можно делать специализацию во время компиляции.
Так там и очень много ограничений в итоге на возможности системы типов
источник

a

aλeχknvl in Scala User Group
Oleg ℕizhnik
Так в расте есть виртуальные таблицы
это ООП тайпклассов 😛
источник

Oℕ

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

Oℕ

Oleg ℕizhnik in Scala User Group
Можно просто почитать пост про "почему async методы в трейтах - невероятно сложная фича, которую мы реализуем неизвестно когда"
источник

a

aλeχknvl in Scala User Group
источник

Oℕ

Oleg ℕizhnik in Scala User Group
да
источник

S

Simon in Scala User Group
еще можно вспомнить почему в rust нет аналога do notation/for comprehension
источник

a

aλeχknvl in Scala User Group
Надо бы изучить Rust подробнее ради ихней системы типов.
источник

λ

λoλegΥch in Scala User Group
источник

a

aλeχknvl in Scala User Group
> I've been writing Rust code since before it was cool to claim you were doing things "before it was cool", and while I appreciate the cases where people have longed for linear types, I have never needed anything more than what destructors provide

Мда, уровень дискуссии как всегда высок.
источник