Note: This is a brand new document (as of 0.8.2 release). It is a rough draft and will get filled in more as time permits.
JRuby is an alternate implementation of the Ruby programming language. It is also an embedded language for the Java Virtual machine (JVM). On both of these fronts, we have a set of limitations that a user should be aware of.
- Does not support continuations/bindings.
- These features are simply missing. There is nothing which prevents them from existing short of programmer effort.
- Fine-grained timer.
- Benchmarking code depends on finer grained timings than the JVM supports. This may be solved in a future JVM as there is a JSR on this (which JSR?).
- Identical thread behavior
- Ruby uses green threads to implement the languages threading library. JRuby uses Java threads to implement Thread and friends. Without actually implementing green threads ourselves, we will not have identical thread behavior. Hopefully, any sane multi-threaded ruby script will work ok in spite of this.
- Missing File operations
- The JVM is missing some file operations needed by File and friends in Ruby. Some JSRs exist which may fix some of these and we could perhaps call external scripts to perform the rest. This is an area we have not spent any time looking at.
- Cannot extend abstract classes
Even though we can implement interfaces, we cannot extend abstract classes. This is for two reasons:
- Javas Proxy (which we use to pull in java classes) does not allow proxying an abstract class
- Java consumers cannot see what we are extending (see next item on list)
This feature will work once we have a compiler
- Extended Java Classes in Ruby will not be visible to Java consumers
Consider the following code: