JRuby
≈ 7 min read
Names in other languages
No names in other languages are held for this entry yet.
Article bodies are English and are not machine-translated. A name in another language is not a translation of the article.
JRuby is an implementation of the programming language Ruby on the Java virtual machine, written largely in Java. It is free software released under a three-way Eclipse Public License (EPL); GNU General Public License (GPL), GNU Lesser Public License (LGPL). JRuby is tightly integrated with Java to allow embedding the interpreter into any Java application with full two-way access between Java and Ruby code (similar to Jython for the Python language). JRuby's lead developers are Charles Oliver Nutter and Thomas Enebo, with many current and past contributors including Ola Bini and Nick Sieger. In September 2006, Sun Microsystems hired Enebo and Nutter to work on JRuby full-time. In June 2007, ThoughtWorks hired Ola Bini to work on Ruby and JRuby. In July 2009, the JRuby developers left Sun to continue JRuby development at Engine Yard. In May 2012, Nutter and Enebo left Engine Yard to work on JRuby at Red Hat.
JRuby is an implementation of the programming language Ruby on the Java virtual machine, written largely in Java. It is free software released under a three-way Eclipse Public License (EPL); GNU General Public License (GPL), GNU Lesser Public License (LGPL). JRuby is tightly integrated with Java to allow embedding the interpreter into any Java application with full two-way access between Java and Ruby code (similar to Jython for the Python language). JRuby's lead developers are Charles Oliver Nutter and Thomas Enebo, with many current and past contributors including Ola Bini and Nick Sieger. In September 2006, Sun Microsystems hired Enebo and Nutter to work on JRuby full-time. In June 2007, ThoughtWorks hired Ola Bini to work on Ruby and JRuby. In July 2009, the JRuby developers left Sun to continue JRuby development at Engine Yard. In May 2012, Nutter and Enebo left Engine Yard to work on JRuby at Red Hat. ==History== JRuby was originally created by Jan Arne Petersen, in 2001. At that time and for several years following, the code was a direct port of the Ruby 1.6 C code. With the release of Ruby 1.8.6, an effort began to update JRuby to 1.8.6 features and semantics. Since 2001, several contributors have assisted the project, leading to the current ( ) core team of around six members. JRuby 1.1 added just-in-time compilation (JIT) and ahead-of-time compilation (AOT) modes to JRuby and was already faster in most cases than the then-current Ruby 1.8.7 reference implementation. JRuby packages are available for most platforms. In mid-2008, Fedora Linux 9 was among the first to include it as a standard package at JRuby 1.1.1. In July 2009, the core JRuby developers at Sun Microsystems, Charles Oliver Nutter, Thomas Enebo, and Nick Sieger, joined Engine Yard to continue JRuby development. In May 2012, Nutter and Enebo left Engine Yard to work on JRuby at Red Hat. JRuby has supported compatibility with Ruby MRI versions 1.6 through 1.9.3. JRuby 1.0 supported Ruby 1.8.6, with JRuby 1.4.0 updating that compatibility to Ruby 1.8.7. JRuby 1.6.0 added simultaneous support for Ruby 1.9.2, with JRuby 1.7.0 making Ruby 1.9.3 the default execution mode (Ruby 1.8.7 compatibility is available via a command-line interface flag). JRuby 9.0.0.0 added support for Ruby 2.2. The current version of JRuby (10.0.3.0) targets Ruby 3.4. ===Ruby on Rails=== JRuby has been able to run the Ruby on Rails web framework since version 0.9 (May 2006), with the ability to execute RubyGems and WEBrick. Since the hiring of the two lead developers by Sun, Rails compatibility and speed have improved greatly. JRuby version 1.0 successfully passed nearly all of Rails's own test cases. Since then, developers have begun to use JRuby for Rails applications in production environments. ===Multiple virtual machine collaboration=== On February 27, 2008, Sun Microsystems and the University of Tokyo announced a joint-research project to implement a virtual machine capable of executing more than one Ruby or JRuby application on one interpreter. ===Dynamic invocation on Java virtual machines=== JSR 292 (Supporting Dynamically Typed Languages on the Java TM Platform) proposes: adding a new invokedynamic instruction at the JVM level, allowing method invocation using dynamic type checking, dynamically changing classes and methods at runtime. The Sun Open source project Multi Language Virtual Machine aims to prototype this JSR. The first working prototype, developed as a patch on OpenJDK, was announced and made available on end of August 2008. The JRuby team has implemented dynamic invocation into their codebase. Dynamic invocation initially shipped with the 1.1.5 release in a primitive form. Version 1.7.0 enabled it by default on Java 8 builds. ==Design== Since early 2006, the current JRuby core team has endeavored to move JRuby beyond being a simple C port, to support better performance and to aid eventual compiling to JVM bytecode. To support this end, the team set an ambitious goal: to be able to run Ruby on Rails unmodified using JRuby. In the process of achieving this goal, the JRuby test suite expanded to such extent that the team gained confidence in the "correctness" of JRuby. As a result, toward the end of 2006 and in the beginning of 2007, they began to commit much more complicated redesigns and refactorings of JRuby's core subsystems. JRuby is designed to work as a mixed-mode virtual machine for Ruby, where code can be either interpreted directly, just-in-time compiled at runtime to JVM bytecode, or ahead-of-time compiled to JVM bytecode before execution. Until October 2007, only the interpreted mode supported all Ruby constructs, but a full AOT/JIT compiler is available since version 1.1. The compiler design allows for interpreted and compiled code to run side-by-side, and for decompiling to reoptimize and outputting generated bytecode as Java class files. ==Frameworks support== JRuby has built-in support for Rails, RSpec, Rake, and RubyGems. It embeds an FFI subsystem to allow the use of C libraries bundled as gems. It also allows launching the Interactive Ruby Shell (irb) as Ruby MRI does. The Netbeans Ruby Pack, available in NetBeans 6, allows integrated development environment (IDE) development with Ruby, JRuby, and Ruby on Rails for both implementations of Ruby. It is no longer included in NetBeans 7.0 and later. ==Programming== ===Ruby meets Java=== JRuby is similar to the standard Ruby interpreter except written in Java. JRuby features some of the same concepts, including object-oriented programming, and dynamic typing as Ruby. The key difference is that JRuby is tightly integrated with Java, and can be called directly from Java programs. Java has significant footing in the development of web applications. ===JRuby calling Java=== One powerful feature of JRuby is its ability to invoke the classes of the Java Platform. To do this, one must first load JRuby's Java support, by calling "require 'java'". The following example creates a Java JFrame with a JLabel: require 'java' frame = javax.swing.JFrame.new frame.getContentPane.add javax.swing.JLabel.new('Hello, World!') frame.setDefaultCloseOperation javax.swing.JFrame::EXIT_ON_CLOSE frame.pack frame.set_visible true JRuby also allows the user to call Java code using the more Ruby-like underscore method naming and to refer to JavaBean properties as attributes: frame.content_pane.add label frame.visible = true //Example using JSR 233 Scripting for Java 6 ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine rbEngine = mgr.getEngineByExtension("rb"); try { rbEngine.eval("puts 'Hello World!'"); } catch (ScriptException ex) { ex.printStackTrace(); } ==See also== GraalVM List of Java scripting languages ZK (framework) – an Ajax framework supporting JRuby ==References== ==Further reading== ==External links==
Text derived from https://en.wikipedia.org/w/index.php?oldid=1364079359 under CC BY-SA 4.0; modifications have been made.