REDMOND, Wash. — As the Ruby language becomes more popular, Microsoft, Sun Microsystems and others are working on ways to make the language run better on various platforms.
John Lam, a program manager on the Microsoft DLR (Dynamic Language Runtime) team and the creator of the RubyCLR bridge for Ruby developers to write Ruby code on the Microsoft CLR (Common Language Runtime), spoke about Microsoft’s effort to deliver an implementation of Ruby for the .Net platform, known as IronRuby.
Lam spoke at the Lang.NET conference on Microsoft’s campus here Jan. 30, noting that Ruby is a “cross-generational” language because “old fogies and young kids” alike like to use the language. Some folks are using the Ruby-based Ruby on Rails framework for large-scale data center work, Lam said.
However, Lam added that his goal is to see Ruby run in as many places as possible.
“We want it to run natively on Windows and wherever the DLR runs,” including Linux and the Mac, he said. “And almost everybody is interested in running Rails on top of our implementation.”
Lam pointed to the various implementations in the works, including his own IronRuby effort, Sun’s JRuby, Queensland University of Technology’s (QUT) Ruby.Net and the Rubinius virtual machine and compiler for Ruby. IronRuby thus far passes 57 percent of the Rubinius test suite. However, the project has debugging support and has inherited the “tokenizer” and parser from the QUT project.
Meanwhile, as the interfaces between the DLR and IronRuby are still in the process of being solidified, Lam said Microsoft is not yet ready to open up the entire project to outside developers. In addition, the IronRuby team has done nothing in the way of performance tuning, he said, adding that the effort is still early and the IronRuby team continues to work toward a beta and then a 1.0 release.
Wayne Kelly, a lecturer at QUT and lead on the Ruby.NET project, said the effort started in 2005 after QUT had done some work in 2003 on delivering a version of the Perl language for the .Net platform — Perl.Net, funded by Microsoft Research.
Kelly said the first beta release of the Ruby.NET compiler came out in 2006 and it was based on early results coming out of Microsoft’s IronPython project to deliver an implementation of the Python language on the .Net platform.
The Da Vinci Machine
The Ruby.NET project produced the Gardens Point Parser Generator, which was then used in other .Net language projects and found its way into Visual Studio, Kelly said. Yet, despite several ongoing Ruby development efforts, “there’s no real potential for reuse from the different teams,” he said.
“If we were to start this project today we’d be crazy not to use the DLR,” Kelly said. “It’s superior to the approach we adopted,” but the DLR was not available when Kelly’s effort started.
Meanwhile, Sun is working on its own approach to delivering new languages on the JVM (Java Virtual Machine). John Rose, a Sun engineer and lead of a Sun project known as the Da Vinci Machine, said his company “had to do something like the CLR.”
The JVM provided flexible online code tooling, reflective access to classes and objects, lots of ancillary tools, good libraries and clever performance techniques, Rose said.
But some things have been missing that would enable other languages to run easily on the JVM, such as dynamic invocation, higher performance, lightweight method objects, continuations and stack introspection, and others, Rose said.
Enter the Da Vinci Machine.
“We are extending the JVM with first-class architectural support for languages other than Java, especially dynamic languages,” said the mission statement for the Da Vinci Machine project on Sun’s Web site. “This project will prototype a number of extensions to the JVM, so that it can run non-Java languages efficiently, with a performance level comparable to that of Java itself.”
Rose said that he hopes this project will make the JVM useful for all language implementations. “We want first-class support [for other languages on the JVM]. I think of Java as a great systems programming language for these other languages.”
Charles Nutter, a lead developer on the JRuby effort to create an implementation of Ruby for the JVM, said that until a year ago the JRuby implementation was fully interpreted, but as of November, “we had the compiler complete.” It runs in two modes: AOT (ahead-of-time) and JIT (just-in-time) compiling.