An example of substituability test that is recursive

Brian Goetz brian.goetz at oracle.com
Thu Jan 31 16:56:47 UTC 2019


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 <forax at 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" <forax at univ-mlv.fr>
>> À: "Karen Kinnear" <karen.kinnear at oracle.com>
>> Cc: "valhalla-spec-experts" <valhalla-spec-experts at 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



More information about the valhalla-spec-observers mailing list