hg: lambda/lambda/langtools: Enhancement: more stable serialized lambda names
Peter Levart
peter.levart at gmail.com
Mon Mar 4 00:42:05 PST 2013
Hi Brian, Maurizio,
The generated method name is ok. It could even be compliant with Java
syntax if the "kkkk" part was taken to be a HEX representation of the
hashCode(). Currently the decimal representation can be negative and '-'
character stands-out. I believe all other synthetically generated
methods comply with Java syntax, don't they?
Regards, Peter
On 02/09/2013 07:09 PM, Brian Goetz wrote:
> Yes, they could, but this patch addresses that. It keeps the
> numbering going in that case.
>
> More generally, the goal here is not any sort of "absolute stability";
> but instead to avoid gratuitous instability.
>
>
>
> On 2/9/2013 12:05 PM, Peter Levart wrote:
>>
>> On 02/07/2013 08:30 PM, maurizio.cimadamore at oracle.com wrote:
>>> Changeset: 7bffb45844fb
>>> Author: mcimadamore
>>> Date: 2013-02-07 19:30 +0000
>>> URL:
>>> http://hg.openjdk.java.net/lambda/lambda/langtools/rev/7bffb45844fb
>>>
>>> Enhancement: more stable serialized lambda names
>>>
>>> Serializable lambdas are desugared to methods where name follows
>>> following pattern:
>>>
>>> lambda$mmm$kkkk$nnn
>>>
>>> where mmm is the method name and kkk is the hashcode of the method
>>> signature, and nnn is a sequentially assigned number. That way,
>>> dependencies on lambdas from other methods will be minimized.
>>
>> Hi Maurizio,
>>
>> Could the hashCodes of the signatures of two overloaded methods clash?
>> For example, these two methods:
>>
>> void m(Aa a) { }
>>
>> void m(BB b) { }
>>
>> have method descriptor signatures with same hashCodes.
>>
>> One way to avoid generating name clashes in such contrived examples is
>> to have 'serializableLambdaCounts' Map being keyed by method's declaring
>> class + hashCode of method's signature. String.hash32() could also help
>> avoid clashes.
>>
>> Otherwise, is there some rule that disallows synthetic method names
>> using full ASCII set of chars? Why couldn't the generated method name be
>> composed of the unchanged method signature?
>>
>> Regards, Peter
>>
>>> ! src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
>>> ! src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
>>>
>>>
>>
>>
More information about the lambda-dev
mailing list