# Rubinius : Use Ruby™
Rubinius is an implementation of the Ruby programming language. The Rubinius bytecode virtual machine is written in C++. The bytecode compiler is written in pure Ruby. The vast majority of the core library is also written in Ruby, with some supporting primitives that interact with the VM directly.
Author: Less Than Three. <3. http://less.thanthree.com

1.2.3

## Overview

The Rubinius team is proud to announce the availability of 1.2.1.

1.2.1 is bugfix release for 1.2.0. It contains various bugfixes in functionality and performance improvements.

## About

Rubinius is a high performance environment for running code written in the Ruby programming language. It provides a number of virtual machine features found in other popular language runtimes such as generational garbage collection, Just-In-Time compilation, and compatibility with existing C APIs.

#### Stats

- Release Date: Feb 15th, 2011
- Commits: 258
- Days since last release: 56
- Issues fixed: 21 since 1.2.0

#### Authors

- Brian Ford
- Evan Phoenix
- Dirkjan Bussink
- Victor Hugo Borja
- Yehuda Katz
- Matthew Draper
- Ivan Samsonov
- Konstantin Haase
- Chuck Remes
- Karol Hosiawa
- Michael Jackson
- Santiago Pastorino
- Ari Brown
- Adam Gardiner
- Federico Builes
- Ryan Leavengood
- John Barnette
- burningTyger

## Summary

##### Compatibility

- Fixed compatibility with Passenger 3

##### Closed Issues

- 103e254 FFI: Check for libs by prepending lib too. Fixes #663
- 837ec63 Make set_superclass private to declare intent. Fixes #659
- ab13e56 Return nil for no ip instead of -1, -1 means definition line. Fixes #668
- c3119da Don’t allow nils, so use num2long. Fixes #668
- a42f403 Avoid long DelegatedMethod chains. Fixes #679
- ee5f6b6 Flush data in IO finalizers, run on process exit. Fixes #674
- f276455 Fix lexical scoping issue in eval methods. Fixes #672. Fixes #671
- e473089 Set the proper bytecode position of a when. Fixes #661
- 2758a31 Doesn’t dup & freeze already frozen keys in Hash#[]=. Fixes #665
- 9222e56 msg_controllen should be initialized with CMSG_SPACE, fixes a spec failure on FreeBSD
- dc98d19 Add io/wait. Fixes #648
- a792da8 Remove bunk macro guards. Fixes #655
- b1a7bea Pass the given step through to the enumerator. Fixes #650.
- 3feeacc Support Proc subclasses properly. Fixes #645. Fixes #646.
- 38cfb72 Time.now creates an instance of subclasses if needed. Fixes #644.
- 68f7f11 Use StringValue coercion in String#casecmp. Fixes #626
- c1b4674 Don’t accidently add a nil finalizer. Fixes #643
- f33f88c Descending ranges in String#tr’s to_str aren’t empty. Fixes #620.
- 047a8f4 Added subcommand docs to loader help. Closes #662.
- c3a27b1 String#strip should only remove consecutive null bytes. Closes #625
- ef4166d Use _p in predicates like everywhere else. Closes #658.

##### Bug fixes

- (CRASH) Fix JIT CFG block calculation bug.
- (CRASH) Fix JIT bug creating a block (Fancy).
- (CRASH) Only allow finalizers to be set on references.
- Fix argument coercion to Time.mktime.
- Fix IO.select: it should return any read IO with data buffered.
- Updated RbReadline to 0cc4cb31e.
- Fix Array#inspect to taint the result.
- Fix Array#rindex modication during iteration case.
- Fix Array#inspect to taint result String.
- Fix Array#rindex. It returns an Enumerator when passed no block or argument.
- Fix Array#flatten to ignore nil return from #to_ary.
- Fix Array#product to check the result size first.
- Fix ‘ruby -S gem’ by checking for a gem wrapper before searching PATH.
- Fix Array#[]= from incorrectly changing @start.
- Fix a very broken Array#each_index.
- Ensure Array#shift adjusts indices properly.
- Fix Fixnum#» bit width boundary.
- Create full-named generator methods from insns and aliases for short names.
- Workaround for tr1/unordered_map including <cmath> on OSX 10.5 GCC 4.0.1.</cmath>
- Write Agent discovery file to /tmp if possible when TMPDIR not set.
- Improve RUBYOPT support.
- Fix Object#instance_exec. It should raise LocalJumpError.
- Fix Numeric#step.
- Fix Array().
- Fix Array#shuffle! to raise if frozen.
- Fix Array#cycle.
- Remove the Agent thread before exec().
- Add Marshal.restore as an alias for Marshal.load.
- Add UNIXSocket#send_io/recv_io.
- Rename Process.spawn to Process.replace to avoid naming conflict.
- Allow ‘@@’ and ‘@’ to be a valid argument for instance_variable_set.
- Properly mark a thread as dying when it’s killed

##### Minor additions

- Add expect.rb from MRI standard library
- Add thwait.rb from MRI standard library
- Added lib/rss from MRI standard library
- Add missing (and deprecated) alt SHA1 and MD5 classes
- Add thread timing to Struct::Tms, use in benchmark
- Add optional rbc database support

##### Performance

- Fixed melbourne perf regression due to C-API caching.
- Handle String#splice! requests better
- Improve perf of String#[]= ‘’

##### System

- Add Haiku support
- Update config.guess
- A couple changes to build on NetBSD 5.99.

##### Documentation

- Begin documentation of the compiler infrastructure
- Add back Doxygen support for generating VM docs
- Translated contributing and communication into Polish
- Getting-started and contributing Russian translation.
- Translated new troublesooting sections for FreeBSD to spanish.
- Updated troubleshooting docs for FreeBSD execinfo issue.
- Improved howto - write documentation docs.
- Minor improvements to spanish version of memory-analysis

##### C-API

- Add rb_str_buf_new2
- Better RSTRING caching
- Better RARRAY caching
- Add rb_thread_fd_writable