InfoQ

News

JSR-292 Early Draft Review Announced

Posted by R.J. Lorimer on May 25, 2008 12:18 PM

Community
Java
Topics
Language Design ,
Dynamic Languages ,
Announcements ,
JCP Standards ,
Performance & Scalability
Tags
JSR 292 ,
JVM ,
JCP ,
Languages
As announced by John Rose, The early draft review for JSR-292 has been released on the heels of JavaOne. JSR-292 is an effort to define the specification of the invokedynamic instruction for the Java Virtual Machine.

InfoQ previously covered JSR-292 in October as part of the initial announcement for the Da Vinci Virtual Machine Project (MLVM), a test bed for technologies like invokedynamic.

John Rose, who is the specification lead for JSR-292 and primary individual behind the MLVM, has provided regular discussions on his blog with respect to making the JVM more accessible to dynamic languages. Recently, Rose described the reasons for proposing JSR-292:

Why add another invoke bytecode? The answer is that call sites (instances of invoke bytecodes) are useful, and yet the existing formulas for invocation are tied so closely to the Java language that the natural capabilities of the JVM are not fully available to languages that would benefit from them. The key restrictions are:

  • the receiver type must conform to the resolved type of the call site
  • there is no generic way to create adapters around call targets (a corollary of the previous point)
  • the call site must link, which means the resolved method always pre-exists
  • the symbolic call name is the name of an actual method (a corollary of the previous point)
  • argument matching is exact with no implicit coercions (another corollary)
  • linkage decisions cannot be reversed (although optimization decisions change, invisibly)
Dynamic languages implementors expend much time and effort working around these limitations, simulating generic calls in terms of JVM invoke bytecodes constrained by the Java language.
Later in the same entry, he describes the solution the JSR-292 team is proposing:
Our solution to these requirements is in three steps. First, we factor out method handles as a simple and generic way of managing methods (arbitrary JVM methods) as units of behavior, which are (as methods should be) directly callable. Second, we define an invokedynamic instruction with one machine word of linkage state, a handle to the call site’s target method. Third, we define a set of core Java APIs for managing linkage state and creating the target method handles for call sites, taking care they these APIs can present the right optimization opportunities to JVMs that wish to exploit them.
The announcement of the early draft review kicks off the 90-day review period of the JSR, which will conclude on August 17th, 2008. There are a number ways to stay informed and provide feedback on this JSR as the review period continues:
InfoQ will continue to track JSR-292 and will provide updates in our Java community.






No comments

Watch Thread Reply

Educational Content

Bindings, Platforms, and Innovation

This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.

Orchestrating Long Running Activities with JBoss / JBPM

This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.

Neo4j - The Benefits of Graph Databases

This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.

Realistic about Risk: Software development with Real Options

This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.

Communication Flexibility Using Bindings

This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.

Writing DSLs in Groovy

After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.

Scaling Agile with C/ALM (Collaborative Application Lifecycle Management)

IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.

Concurrent Programming with Microsoft F#

Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.