Hi,
Recently I was debugging some issues regarding class size and I’ve discovered that Scala 3 generates more code for lambdas than Scala 2.13
Code:
object Calculator {
def add(a1: => Int, a2: => Int): Int = a1 + a2
}
object Main {
def main(args: Array[String]): Unit = {
println(Calculator.add({
Calculator.add({
2
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
Calculator.add({
1
}, {
Calculator.add({
2
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
1
}, {
2
})
})
})
})
})
}, {
Calculator.add({
1
}, {
2
})
})
})
})
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
Calculator.add({
Calculator.add({
2
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
1
}, {
2
})
})
})
})
}, {
2
})
}, {
Calculator.add({
Calculator.add({
2
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
1
}, {
2
})
})
})
})
}, {
Calculator.add({
2
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
Calculator.add({
1
}, {
2
})
}, {
Calculator.add({
1
}, {
2
})
})
})
})
})
})
})
}))
}
}
Scala 2.13:
Classfile target/scala-2.13/classes/Main$.class
Last modified 26 maj 2024; size 9420 bytes
Scala 3.3:
Classfile target/scala-3.3.3/classes/Main$.class
Last modified 26 maj 2024; size 14658 bytes
Scala 3.4:
Classfile target/scala-3.4.2/classes/Main$.class
Last modified 26 maj 2024; size 13283 bytes
Was this size increase caused by some performance optimizations or is this a bug?