scala3
scala3 copied to clipboard
Performance of compiletime tuple construction
Compiler version
3.2.0
Minimized example
Tuple construction through constValueTuple, summonAll and probably others too currently run in quadratic time at runtime, constructing all the smaller tuple sizes before getting to the desired one.
def foo: (String, Int, Double, String, Boolean) =
scala.compiletime.constValueTuple[("foo", 5, 3.14, "bar", false)]
Decompiled Java
public Tuple5 foo() {
String var2 = "foo";
boolean var5 = true;
double var8 = 3.14;
String var12 = "bar";
boolean var15 = false;
Tuple.package.EmptyTuple Tuple_this = .MODULE$;
Product res = (Tuple1)scala.runtime.Tuples..MODULE$.cons(BoxesRunTime.boxToBoolean(false), Tuple_this);
Tuple1 Tuple_this = (Tuple1)res;
Product res = (Tuple2)scala.runtime.Tuples..MODULE$.cons("bar", Tuple_this);
Tuple2 Tuple_this = (Tuple2)res;
Product res = (Tuple3)scala.runtime.Tuples..MODULE$.cons(BoxesRunTime.boxToDouble(3.14), Tuple_this);
Tuple3 Tuple_this = (Tuple3)res;
Product res = (Tuple4)scala.runtime.Tuples..MODULE$.cons(BoxesRunTime.boxToInteger(5), Tuple_this);
Tuple4 Tuple_this = (Tuple4)res;
Product res = (Tuple5)scala.runtime.Tuples..MODULE$.cons("foo", Tuple_this);
return (Tuple5)res;
}
Expectation
public Tuple5 foo() {
return scala.Tuple5..MODULE$.apply("foo", BoxesRunTime.boxToInteger(5), BoxesRunTime.boxToDouble(3.14), "bar", BoxesRunTime.boxToBoolean(false));
}