# 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.0.1.

1.0.1 is primarily a bugfix release, meant to address issues found in the 1.0. We decided to do a 1.0.1 because there were some installations issues found in 1.0 that prevented some new users from using Rubinius. Additionally, a few crash bugs were uncovered which we felt warranted a quick release.

As a bonus, this release includes fixes for running a number of popular gems. The C-API support is extended to cover functionality required by popular gems such as gherkin, curb, rjb/buildr, and many more.

#### Stats

- Commits: 199
- Days since last release: 23

#### Authors

- Brian Ford
- Dirkjan Bussink
- Evan Phoenix
- Ivan Samsonov
- Matthew Draper
- Mikko Perttunen
- Wilson Bilkovich

## Summary

#### Critical

- Update StackVariable::last_match_ in the GC. Fixes #287.
- Set the stack start and size properly in a thread. @bugfix
- Revise GIL unlocking to keep Thread::saved_call_frame_ sane
- Handle very large values from getrlimit properly
- Add flag to disallow direct allocation. Fixes #335.

#### Fixes

- Fixed defined?(a && b). Closes #302.
- Fixed Fixnum and Bignum bit shifts.
- Imported lib/matrix.rb from 1.9 with many bug fixes. @bugfix
- Revert Matrix#** behavior for exception to 1.8 version. @bugfix
- Changed libgdtoa g_dfmt() to emit MRI format for minimal, unique String representation of Float.
- Added to_s_minimal primitive for Float#to_s.
- Use send to reach private extend_object methods. Closes #324.
- Don’t use a increment operation and the original value in the same expression
- Explicitly cast the return value of stack_pop() to void*
- Initial work to enable compiling with clang
- Use error state for read / write and print out the message
- Generalize jit generation for fixnum comparison operations
- Honor read-only-ness of certain globals. Fixes #283.
- Escape slashes in Regexp#to_s output. Fixes #308.
- Disambiguate a vcall send to the send_method opcode. Fixes #293.
- Evaluate next’s argument even though it’s ignored. Fixes #307.
- Report path to script bodies relatively. Fixes #308.
- Remove Numeric#==
- Use Kernel.exit! after a forked block returns. Fixes #289.
- Fix fork to allow SystemExit through properly
- Be persistant with write(2)
- Handle object_id’s for immediates. Fixes #315.
- Alter protocol for how Proc with a bound method is invoked. Fixes #277.
- Teach Signal.trap the rest of it’s tricks. Fixes #314.
- Make sure the arguments are Strings. @bugfix
- Cleanup and speed up Struct
- Add missing functionality to Signal.trap
- Introduce -Xprofile to be used instead of -P
- Cleanup and fix irb’s save history feature
- Search Object’s includes also. Fixes #328
- Make sure thet the default vis in a script body is private. Fixes #327
- Make STDOUT.reopen(path) effect the system fd. Fixes #322.
- Use the encoding of the Regexp in String#split on characters. Fixes #323
- Be sure to cleanup any temp modifications during #delete_if
- Let –enable-llvm do something. Fixes #336.
- Add flag support to new Dir.glob, always use it
- Handle write() setting EAGAIN properly
- Handle ECONNRESET like eof. Fixes #338
- Add UNIXSocket.pair
- Add Inliner::fixnum_le, and self recursion cuteness
- Simplify the Class#to_s of a metaclass (rails fix)
- Allow Modules to be dup’d, but not String
- Flip include order so that local LLVM wins
- Fix left shifting for fixnums
- Repair Bignum#divmod for cases with negative numbers. Fixes #319.
- Speed up String#[] and String#=~
- A Time is not eql? to a non-time.
- Raise the right exception when alias fails in a module.
- method_defined? shouldn’t search Object/Kernel.
- Print error messages to stderr instead of stdout.
- Ensure the proper Regexp constant is found when processing literals
- Introduce ‘push_rubinius’ instruction and use it like a rented mule
- Factor out some jit code from push_cpath_top and push_rubinius
- Quit as early as possible if we’re building on an unsupported platform

#### FFI

- Search all iconv FFI libs.
- Fix FFI::DynamicLibrary::Symbol#inspect
- Exclude info generation from all in libffi. Fixes #286.
- Add missing header files to scan for mode_t
- FFI API revamp, take 1.

#### C-API

- Added rb_ary_delete.
- Changed rb_set_errinfo to accept Qnil like 1.9.
- Added HAVE_STDARG_PROTOTYPES for C-API. Closes #300.
- Added OBJ_FREEZE for bluecloth gem.
- Added more C-API functions to get rjb to load.
- Only set status in rb_protect if it is not NULL.
- More C-API functions for DL.
- Added C-API HAVE_ macros for Hash.
- Moved C-API .h files to include directory.
- Moved C-API specs under spec/ruby/optional.
- Fixed rb_big2dbl.
- Add hacked rb_iterate/rb_each
- Add rb_reg_regcomp
- Annotate rb_raise as not returning to fix gherkin warnings. Fixes #309.
- Add stub of re.h
- Add missing symbols for curb
- Add simplicit rb_thread_blocking_region
- Provide builtin UBF macros
- Flesh out C-API to compile ImageMagick. Fixes #294.
- Make readline multithread aware and minor cleanup
- Check for async events when returning from a native method
- Check async events and raise an exception via rb_thread_select.
- Fix INT2NUM to actually take a long, not an int.
- Implement rb_is_{const,instance_class}_id() in CAPI.
- rb_protect’s callback takes a VALUE, not ANYARGS.
- Add apparently-missed prototype for rb_apply()
- Add rb_f_global_variables() and rb_str_new3().
- rb_define_module_under() shouldn’t return a parent’s module.
- Make rb_num2dbl handle all inputs correctly.
- Set rbconfig’s LIBS to “” to to appease mkrf
- Set rbconfig’s LIBRUBYARG_SHARED to “”, because we don’t have a shared library yet.
- Add NativeMethod functors up to a ten-argument version

#### New

- Added NKF ext from MRI 1.8.7. Closes #304.
- Imported DL extension from 1.8.7.

#### EXPERIMENTAL

- Rewire debugger infrastructure, add new simple debugger.
- Add defered breakpoints to the debugger
- Add backtrace and discover ability to QueryAgent
- Started on the console, pulled in our own copy of bert
- Revamp agent API, add a number of variables
- Get jit.inline.blocks running again
- Add Rubinius::Agent and agent loopback connection
- Add -Xjit.sync