Function types versus arrays

Mikael Grev grev at miginfocom.com
Mon Feb 8 11:40:33 PST 2010


I tend to use arrays a lot, but almost exclusively with primitives. I do it for the speed and lesser memory consumption. When I have a collection of references to objects, i.e. when I'm not storing primitives, I almost exclusively use the collection classes. I have never encountered an ArrayStoreException to this date, obviously.

I do not think one would ever _need_ to store lambdas in arrays. I see no need since I estimate the relative performance and memory consumption winnings would be minimal.

Cheers,
Mikael


On Feb 8, 2010, at 20:30 PM, Alex Buckley wrote:

> Neal raises a fair point. I recognize that arrays of function types are 
> as potentially unsafe at runtime as arrays of non-wildcard parameterized 
> types.
> 
> And this is the same problem one sees when passing variables of 
> parameterized types as varargs parameters. The varargs method body can 
> silently do unsafe things, thanks to Object being a universal supertype.
> 
> Banning arrays of function types is an option. It somewhat conflicts 
> with Project Coin's promotion of [] syntax to read/write collections.
> 
> I am interested in people's thoughts on the limitations of arrays of 
> parameterized types. (Reification was not and is not an option, so 
> please no ranting about the stupid implications of erasure.) Does anyone 
> care about arrays anymore?
> 
> Alex
> 
> Rémi Forax wrote:
>> Le 07/02/2010 19:41, Neal Gafter a écrit :
>>> I've been asked if arrays and function types will play nicely
>>> together.  Specifically, for example, whether or not something like
>>> the following will be allowed:
>>> 
>>> #String(String)[] arrayOfFunction = new #String(String)[10];
>>> 
>>> The current draft spec, by the absence of any constraining rules,
>>> implies yes.  But if I have to guess, I would say the end result of
>>> project lambda will probably say no.  Although we haven't talked much
>>> about implementation techniques, I'm not aware of any proposed
>>> implementation technique that would allow this without opening a hole
>>> in the type system.
>>> 
>>> I don't know whether we should consider this important or not (I
>>> don't; I'm perfectly happy using java.util.List), but if it is
>>> important then someone should be thinking about what needs to happen
>>> (VM support?) to make it work.
>>> 
>> 
>> For the record the problem is:
>> 
>> #String(String)[] arrayOfFunction = new #String(String)[10];
>> Object[] array = arrayOfFunction;
>> array[0] = #int() (2);
>> 
>> The last line should raise an array store exception.
>> So the VM should be aware of the precise type of the array of function.
>> 
>> Currently, neither the anonymous class translation nor the method handle one
>> provide reified function type so array of function types are unsafe.
>> 
>> Because function type doesn't exist in the language, I propose to make 
>> the syntax
>> for an array of function type (#String(String)[]) illegal.
>> 
>> I'm also happy with List, perhaps we should introduce a new interface 
>> ReadOnlyList
>> which is a super type of List and array of objects but that another story.
>> 
>>> Cheers,
>>> Neal
>>> 
>> 
>> Rémi
>> 



More information about the lambda-dev mailing list