Skip to content

Performance of compiletime tuple construction #15988

Closed
@Katrix

Description

@Katrix

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));
   }

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions