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

Reply via email to