Right. We figured people already generating lots of wrappers (like JRuby in particular) would not miss asInstance as much.
OTOH, as Robert Fischer just pointed out, it often helps to have a paradigm bridge. And if the bridge is built by the platform, it is likely to be fast and solid. -- John On Apr 2, 2011, at 5:29 PM, Charles Oliver Nutter wrote: > I'd use it if there, but we already generate so much bytecode at > runtime, including non-Proxy "real" implementations of interfaces, > that it's really not a big deal if it isn't there. > > However...the fact that I *would* use it means that eventually I > *will* use it, which then means yet another item I need to support > multiple mechanisms for. In the case of interface impl, that means I'd > be maintaining: > > * Proxy-based version for systems that disallow loading user bytecode > * JRuby's own bytecode-based interface impl > * asInstance-based interface impl (for single-method interfaces, at least) > > I'm not complaining, just pointing that out :) > > - Charlie > > On Mon, Mar 28, 2011 at 5:37 PM, John Rose <john.r.r...@oracle.com> wrote: >> You may have noticed that the JSR 292 API includes a conversion operator >> (called MethodHandles.asInstance) to allow a method handles to interoperate >> with single-method interfaces, such as Runnable. This is a small but >> (maybe) useful subset of the SAM conversion which is being defined by >> Project Lambda. >> >> The Public Review document even mentions "SAM" types, although we are >> removing that terminology, since it is out of scope for JDK 7. There is a >> proposal to remove asInstance from the API altogether, leaving users to >> solve interoperability by whatever combination of hand-written adapter >> classes and bytecode spinning. >> >> Here's my question: Who plans to use asInstance in JDK 7? What would it >> cost you if we were to omit it from JDK 7, and you had to wait for the full >> SAM-integrated version in JDK 8? >> >> Thanks, >> -- John >> >> P.S. Brief background: Many function-like types defined in existing >> (pre-7) Java systems are defined as single-method interfaces. Runnable is >> the canonical, aboriginal example. There are other ways to do function-like >> types, too, such as abstract classes and multiple-entry interfaces (a >> Function that takes one entry point per arity, for example.) But the most >> common pattern is a single-method interface. In order to encourage people >> to use method handles, we would like them to feel free to use them in new >> code, even if this requires "wiring them up" to older APIs that feature >> function-like types. The simplest thing (not the only thing) we can do to >> help with this is to provide a proposed MethodHandles.asInstance API. We >> expect that people with more complex needs will have to spin bytecodes to >> wire up method handles to more complex types. We (the 292 EG) hope to >> provide a more comprehensive interoperation between method handles and >> interfaces in JDK 8, as previousl! y d! >> iscussed. A final point: SAM types are not going to be the same as >> single-method interfaces for a host of reasons currently being thrashed out >> by the Lambda EG. The JSR 292 EG is not going to get into language >> interactions, but instead is going to always take a JVM-centric view, >> defining APIs in terms of JVM-level metadata and operations; this is the >> sanest way to provide multi-language support. >> >> _______________________________________________ >> mlvm-dev mailing list >> mlvm-dev@openjdk.java.net >> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >> _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev