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

Reply via email to