1.2.3

## Overview

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

1.2.3 is a bugfix release for 1.2.2. It contains a complement of bugfixes 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.

## Summary

#### Stats

- Release Date: Mar 15, 2011
- Commits: 212
- Days since last release: 21
- Issues fixed: 10 since 1.2.2

#### Authors

- Evan Phoenix
- Chuck Remes
- Brian Ford
- Dirkjan Bussink
- Graham (stormbrew)
- burningTyger
- Jeff Siegel
- Christopher Bertels
- Wayne E. Seguin
- Eoin Coffey
- David Waite
- Jari Bakken
- John Mair
- Thiago Pradi
- Ivan Samsonov
- Evan Shaw
- Semyon Perepelitsa
- Wim Looman
- Benedikt Müller
- Aman Gupta

##### Closed Issues

- 678ac9d Use Type.obj_kind_of? to a mocked #kind_of? Fixes #762
- acfa7b7 Module#include should return the target include is called on, Fixes #756
- a6fa69b Revert “Use empty binding to eval gemspecs for caching. Fixes #725”
- ee0c62a Use empty binding to eval gemspecs for caching. Fixes #725
- dda607b Handle last_match in an inline block properly. Fixes #720
- f92ec4e Bound the C-API cache for a String when first creating it. Fixes #702
- 33c8117 Handle an Alias for an indistinct superclass method. Fixes #722
- 5bd938b Fix typo in doc links. Fixes #717
- ca0c7ef Fixed arity checking for BlockAsMethod. Fixes #686
- 27a4872 Fixed File.expand_path. Fixes #708

##### Performance

- Begin fleshing out benchmarks with new ips framework
- Performance improvements for Hash#replace, #dup, #reject!, and #reject
- Speed up String#chomp! quite a bit
- Speed up Date._parse by removing clever and adding simple
- Improve performance of Time.at with float values
- Speed up Dir[] by breaking out specific cases and reducing stats
- Improve Array#flatten[!] substantially
- Speed up: Array#delete_at, Array#slice!, and Array#[]=

##### Additions

- Add JOBS= and .be_gentle to control the number of parallel builds
- Introdue Daedalus, a new native code builder
- Update to RubyGems 1.5.2

##### C-API

- Handle ST_DELETE returns from the rb_hash_foreach callback
- Use single identifier to cause compile error on RHASH(_TBL).

##### Platform

- FreeBSD doesn’t need -ldl and OpenBSD already explicitly has it
- Store the make to use in a variable and default to gmake on BSD platforms
- Modify configuration and VM to support both LLVM 2.8 and 2.9 (rc)

##### Bug Fixes

- (CRASH) Handle break and return in various scopes properly
- (CRASH) Fix reading the number of slots a tuple has
- (CRASH) Ensure VM doesn’t improperly unwind into a process exit.
- JIT: Fix returning from a lambda closure
- JIT: Be sure to sign extend the result of an FFI call
- Remove bad $~ assignment code
- Use correct constness for strings returned from the C API
- Update the -v build rev hash every build.
- Fix Hash marshal dump
- Fix YARD bug, don’t use the custom classes #initialize
- Fixed Kernel#abort to coerce non-String arguments.
- JIT: Handle raise_return in all contexts properly (fancy)
- Clarify language/break specs for non-compliant rbx behavior.
- Preserve ancestor chain of singleton class for a dupped class.
- Fix for Exception#backtrace returning nil when @locations are missing.
- Fix URI() to return the argument if it is a URI object
- Remove old references to Rubinius::Scheduler
- Run IO finalizers after we’ve shut down all other threads
- Eval the gemspec cache in an empty binding.
- Fix how and where eval locals are created
- Fixing Hash[] method when passing an array
- Properly detect a constant directory in Dir::Glob
- Permit inspecting a Method having NativeMethod.
- Reset allocations_ so we don’t keep recontributing them
- JIT: Use the custom static scope in a block (dbussink)
- Fixed Kernel#singleton_methods to return a unique list.
- Added Module#define_method with block specs for arity checking.
- raise ArgumentError when no block is given in Module#define_method