Different behavior between (F) and (Object & F)

Brian Goetz brian.goetz at oracle.com
Thu Nov 8 06:51:36 PST 2012


> Why just not to make all lambdas serializable and forget about that?

Several reasons, including:
  - Performance.  Because of our translation strategy, there's a 
performance cost to making all lambdas serializable:
    - Extra static footprint in the capturing class
    - Extra dynamic footprint under some translation schemes (since 
lambda would have to reify all the indy call information present at the 
capture site, including static and dynamic arguments)
    - Some translation schemes can't handle it at all, and this would 
take these off the table, limiting the range of implementation choices

  - Security.  Serializable lambdas effectively get desugared to public 
methods; this means snippets of logic that were implementation details 
of a computation become publicly addressable.  Making this true by 
default increases the attack surface by probably 5 orders of magnitude.

> Allowing to mark lambda with ZAM will cause a huge usage of ZAM marking
> interfaces in user's code. They get new feature -> they will use it in
> all possible ways. But you may check marking with ZAM only by instanceof
> that is not a good style.

I am not sure it will show up that often.  The primary use case is 
'defensive combinators', like Predicate.and(p1, p2), where you want the 
result to be serializable if the input predicates are.  But this is 
locked in library code.  The secondary use case is comparators passed to 
the constructor of TreeMap and the like.  But, we did some analysis of 
existing uses of serializable and concluded that the syntactic intrusion 
would not be very widespread -- but of course we could be wrong.

The choice of syntax for serialization opt-in was one of the hardest 
decisions the EG had to make.  We considered at least a dozen 
candidates, all of which sucked so badly we gave up and had to come back 
to it -- twice.  In the end we chose (IMO) the least objectionable.


More information about the lambda-dev mailing list