We interviewed Yugui, the 1.9 branch release manager of Ruby on the recent development of 1.9.2.
This interview also appears on the December 23, 2009 issue of "WEB+DB PRESS Vol.54".
Translated by Hiro Asari, edited by Leonard Chin
- Q： Ruby 1.9.1 was released in the beginning of 2009. What are the important changes from 1.8.x to 1.9.x?
A： The most important is multilingualization. In 1.9.x, a CSI (Code Set Independent) approach to multilingualization was chosen. This allows multiple languages to be handled simultaneously. Ruby treats all encodings equally, rather than standardizing system's internal encoding. With CSI, it is possible to avoid the overhead of unnecessary transcoding because the same external and internal encodings can be used.
Another important change is the adoption of YARV as the evaluator. It's faster, and enables the use of native threads. The speedup from 1.8.x to 1.9.x is significant enough that irb's startup time is noticeably shorter. Once you get used to the new features and speed of 1.9.x, it's hard to go back to 1.8.x.
- Q： Tell us about the new features in 1.9.2.
A： First, the Socket API in 1.9.2 feels more object-oriented. Until 1.9.1, it was just a simple wrapper around the C library code, with a Perl-ish API. The new API has a certain degree of compatibility, so moving to 1.9.2 shouldn't be very painful.
Second, the Time class has been reimplemented. This was also a C library wrapper. On some platforms, it was only able to express times (UTC) between the years of 1970 to 2038. Now the Time class can even express times from before the birth of our solar system, as well as time after 2038. The internals have changed significantly, but there is no loss of performance.
Third, a new Random class was added. We can guarantee the correctness of random number generator in multithread execution.
Currently, I am working on adding DTrace hooks to 1.9.2, allowing dynamic tracing with minimal overhead. This is already available in MacRuby and the Ruby bundled in Mac OS X, but I would rather not have a buggy implementation become the accepted standard ;)
Ruby on the "bleeding edge"
- Q： What is the position of 1.9.2 in the 1.9.x development series?
A： The 1.9.2 won't add any exciting new features. I believe that most people won't find the new features in 1.9.2 to be very interesting, because the new features address very specific problems. This is because 1.9.1 successful introduced a new "grand design" to Ruby. 1.9.2 addresses some minor design flaws and improves usability, bringing Ruby 1.9 to a stage of maturity. In future releases, significant new features such as MVM are likely to be added again.
During the development of Ruby 1.9.2, we have been working with the cooperation of the Ruby on Rails 3 team. Rails 3 should work with 1.9.2 when it is released.
Also, I plan to release Ruby 1.9.2 as the first version of Ruby that passes RubySpec.
- Q： What is RubySpec?
A： There are now many implementations of the Ruby languages, such as JRuby, besides MRI (Matz's Ruby Impmentation). RubySpec is a project to develop tests which can be used by all such implementations. The Rubinius developers started the project, and JRuby also uses it. The project is currently focused on 1.8.x, but work on 1.9.2 is also in progress.
The reason for RubySpec failure can vary. It could be a problem with the test case, it could be a bug with MSpec (RubySpec's test driver), it could be a bug with 1.9.2, or it could be a problem with the language specification itself. The wide range of failure points is the largest roadblock to the release of 1.9.2. However, it is important for 1.9.2 to pass RubySpec; it shows that 1.9.2 is as stable as 1.8.6.
- Q： What are plans for Ruby after 1.9.2?
A： There is no definite plans, since 1.9.2 is not released yet. The features that had been planned for 1.9.3 are now included for 1.9.2. Mr. Sasada, the developer of YARV, said that he would like to introduce MVM around 1.9.5. There are some general ideas for Ruby 2.0, but there are no plans at all as to which features are going to be implemented when.
- Q： How can people contribute to the development of 1.9.2?
A： Bug fixes would be greatly appreciated. You can find plenty of open bug reports on the official bug tracker. so please submit patches to the ruby-core and the ruby-dev mailing lists.
Of course, there are other ways to contribute. We would like Ruby to run on as many different environments as possible, but there are many environments that are not available to the core developers, such as Mac OS X on PowerPC. Building and testing Ruby in such environments and sending us build reports would be of great help. We are thinking about standardizing such build reports. Also, contribution to documentation projects such as the "Ruby Reference Manual (RuReMa)"（※1） is also welcome. I also encourage contributing to RubySpec, by running it on 1.9.2, finding and fixing bugs.
- Ruby Reference Manual renewal project. Japanese only. http://redmine.ruby-lang.org/wiki/rurema