InfoQ

News

JRuby compiler finished

Posted by Werner Schuster on Sep 28, 2007 10:00 AM

Community
Java,
Ruby
Topics
Announcements ,
Language ,
JRuby ,
Dynamic Languages
Tags
JRuby
Charles Nutter has been working on the JRuby Ruby to Java Bytecode compiler for some time - and now it's finished:
I just finished up compilation on BEGIN and END blocks, which brings the compiler to completion. I've also successfully been able to compile the entire standard library and run IRB and RubyGems entirely off compiled scripts (i.e. I deleted all the .rb files).
This completes some of the items in the mentioned in the JRuby 1.1 plans. With this done, JRuby 1.1, scheduled to be released in time for RubyConf 2007 in early November, can be shipped with the compiler.

More details can be found in the blog announcement of the JRuby compiler:
For the first time ever, there is a complete, fully-functional Ruby 1.8 compiler. There have been other compilers announced that were able to handle all Ruby syntax, and perhaps even compile the entire standard library. But they have never gotten to what in my eyes is really "complete": being able to dump the stdlib .rb files and continue running nontrivial applications like IRB or RubyGems. I think I'm allowed to be a little proud of that accomplishment. JRuby has the first complete and functional 1.8-semantics compiler. That's pretty cool.
Another type of compiler is already planned. This is supposed to further facilitate integration between Java and Ruby:
Compiler #2 will basically take a Ruby class in a given file (or multiple Ruby classes, if you so choose) and generate a normal Java type. This type will look and feel like any other Java class:
  • You can instantiate it with a normal new MyClass(arg1, arg2) from Java code
  • You can invoke all its methods with normal Java invocations
  • You can extend it with your own Java classes
This integration also needs some enhancements to make it possible to use these classes from Java. For instance, defining methods with a certain signature. As Ruby doesn't have explicit type information for signatures, some kind of workaround would be needed:
I've been thinking through implementation-independent ways to specify signatures for Ruby methods. The requirement in my mind is that the same code can run in JRuby and any other Ruby without modification, but in JRuby it will gain additional static type signatures for calls from Java. The syntax I'm kicking around right now looks something like this:
class MyClass
...
{String => [Integer, Array]}
def mymethod(num, ary); end
end
If you're unfamiliar with it, this is basically just a literal hash syntax. The return type, String, is associated with the types of the two method arguments, Integer and Array. In any normal Ruby implementation, this line would be executed, a hash constructed, and execution would proceed with the hash likely getting quickly garbage collected. However Compiler #2 would encounter these lines in the class body and use them to create method signatures like this:
    public String mymethod(int num, List ary) {
...
}
Congratulations by Zak Mandhro Posted Oct 3, 2007 2:26 PM
Re: Congratulations by emrah okay Posted Apr 12, 2009 11:54 PM
Re: Congratulations by emrah okay Posted Jun 19, 2009 7:23 AM
  1. Back to top

    Congratulations

    Oct 3, 2007 2:26 PM by Zak Mandhro

    Congratulations to Charles Nutter and the JRuby team. Excellet work! It just keeps getting better. Java compatibility is great but I am more excited about the potential speed improvements.

  2. Back to top

    Re: Congratulations

    Apr 12, 2009 11:54 PM by emrah okay

    With twenty-four members plus two spec leads, Java EE 6 -- or JSR-316 -- is officially underway, Roberto Chinnici presents a summary from the first meetings between the group saç  video izle program indir indir amerika Sohbet adana Sohbet izmir Sohbet Ağrı Sohbet aksaray Sohbet almanya Sohbet Adıyaman Sohbet Afyon Sohbet ankara Sohbet Antalya Sohbet istanbul Sohbet Afyon Sohbet Afyon Sohbet Haber Haber oyun indir oyun indir sohbet mp3 indir bedava film izle bedava film izle telefon çet oyun indir indir program indir - chat anyone try to appropriate the IP and patent it without OpenID's consent.

  3. Back to top

    Re: Congratulations

    Jun 19, 2009 7:23 AM by emrah okay

    With twenty-four members plus two spec leads, Java EE 6 -- or JSR-316 -- is officially underway, Roberto Chinnici presents a summary from the first meetings between the groupmetin 2 indir video izle oyun indir bedava sohbet mp3 indir bedava film izle oyun indir indir program chat anyone try to appropriate the IP and patent it without OpenID's consent. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- With twenty-four members plus two spec leads, Java EE 6 -- or JSR-316 -- is officially underway, Roberto Chinnici presents a summary from the first meetings between the group saç  video

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.