Currently, `==` is almost useless on lambdas, as we disclaim nearly all promises. What this would mean is that `==` becomes slightly less useless and slightly more expensive. It’s not obvious this is a bad trade (or that it really matters, because people are discouraged from using `==` on lambdas anyway.)
> On Jan 31, 2019, at 11:53 AM, Remi Forax <fo...@univ-mlv.fr> wrote: > > 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