Thinking a little more about this example, i think it will be more common if we retrofit lambdas to be value type because a series of composition of lambdas is a kind of linked list in term of data structure in memory.
For the composition of lambdas, a stack overflow is unlikely because otherwise calling the lambda will stack overflow too but it means that == will be slow (because it does a recursive comparison). Rémi ----- Mail original ----- > De: "Remi Forax" <fo...@univ-mlv.fr> > À: "Karen Kinnear" <karen.kinn...@oracle.com> > Cc: "valhalla-spec-experts" <valhalla-spec-experts@openjdk.java.net> > Envoyé: Jeudi 31 Janvier 2019 12:19:32 > Objet: An example of substituability test that is recursive > Hi Karen, > here is an example that recurse to its death with the current prototype > > import java.lang.invoke.ValueBootstrapMethods; > import java.util.stream.IntStream; > > public class Substituable { > static value class Link { > private final int value; > private final Object next; > > public Link(int value, Object next) { > this.value = value; > this.next = next; > } > > static Object times(int count) { > return IntStream.range(0, count).boxed().reduce(null, (acc, index) -> new > Link(index, acc), (l1, l2) -> { throw null; }); > } > } > > > public static void main(String[] args) { > var l = Link.times(1_000); > > //System.out.println(l == l); > System.out.println(ValueBootstrapMethods.isSubstitutable(l, l)); > } > } > > > Rémi