[MacRuby-devel] trunk status update

Laurent Sansonetti lsansonetti at apple.com
Mon Nov 16 18:23:16 PST 2009

Hi guys,

It has been a little bit more than a month since the last status  
update, which was for beta1. It is now time to release beta2. I am  
preparing the release at the moment as well as a blog article, but  
here are the changes.

Enjoy! The final 0.5 release is not far at this point :-)


- rdoc, ri, rack, sinatra are now working.
- DTrace probes are available. Same as in MacRuby 0.4.
- BigDecimal, OpenSSL and JSON support (experimental).
- macrubyc: support for building fat binaries (using the --arch  
- New tool: macruby_deploy, to help you deploying a MacRuby  
application, by ahead-of-time compiling its source code and relocating  
the MacRuby framework inside the application bundle. One-click Xcode  
targets provided.
- Lots of bugs fixed, especially related to compatibility, thread- 
safeness and memory/resource leaks.


- Added JSON support, based on the yajl library (experimental).
- Fixed a bug when compiling super without arguments, where the  
method's &block wouldn't be passed.
- Fixed a bug during singleton class creation where the super class  
would not have any outer.
- Fixed a bug in the VM method preparation routine when the current VM  
class would be a metaclass.
- The compiler now honors the current VM class when compiling outers.
- Fixed a crash in String#[] when called with 2 arguments and when the  
last one is negative.
- Fixed Object#class to never return singleton classes.
- Fixed a parsing crash that would happen if a magic comment includes  
an encoding that we do not recognize.
- Fixed Object#inspect output to not include extra characters.
- Fixed #method_missing to be called with Ruby-like selectors.
- Do not install special methods on singleton classes.
- Fixed several module mixin bugs.
- Fixed a bug in Proc#to_s to print lambda status.
- Implemented 1.9 lambda syntax (->).
- Now sanitizing method names before passing them to the added/removed/ 
undefined callbacks.
- When mixing a class with a module, make sure to JIT methods that  
already exist in the target class.
- Fixed a bug when #method_added would be called during method  
compilation and not registration.
- Fixed Module#<= to honor included modules.
- Optimized IO#gets to read from the IO cache if available.
- Optimized Hash#each to be slightly faster.
- Optimized Hash#[] to not dispatch #default if it's unnecessary.
- Optimized #[] and #[]= dispatches for Hash.
- Optimized #respond_to? by caching results.
- Fixed a bug in the compilation of global variable assignments where  
potential exceptions would not properly be intercepted.
- Bring back #[], #[]= and #<< optimizations (oops).
- Optimized returns from non-ensure-scoped and non-Proc blocks.
- void-returning objc calls now return the receiver instead of nil.
- Fixed a bug in Kernel#respond_to? to avoid recursive calls.
- Fixed a bug in YAML objects deserialization, where #new would be  
called instead of #alloc.
- When changing the visibility of a method that is included in  
classes, make sure the new flags are recursively applied.
- When registering a new method, if the given class also responds to  
the arity-1+1 selector let's make it unavailable, to fully conform to  
the way Ruby behaves.
- Fixed a bug in the compilation of super without argument where the  
scoping method has arguments with default values.
- Fixed AOT compilation of backquote with a literal string.
- return-from-block is now active for further dispatch calls inside  
the same method
- Do not return-from-block from lambdas (to mimic MRI 1.9).
- Implemented VM cleanup.
- Fixed Thread resource leaks.
- Unregister VM objects created from GCD pthreads.
- Make sure Thread and GCD blocks are detachable (that they won't be  
cached and that their dvars will be preserved when leaving the scope  
where the blocks have been created).
- Merge to recent CRuby readline.
- Implemented ObjectSpace finalizers (experimental).
- Fixed Pointer to work with ^v (void *) type.
- Fixed a const lookup bug when rb_define_module() wouldn't set a  
default outer.
- Call Symbol#to_s if #description is called, instead of #inspect.
- Better MRI 1.9 C API compatibility.
- Added OpenSSL extension (experimental).
- Added macruby_deploy, a tool to help compiling AOT a MacRuby app and  
relocating MacRuby.framework inside it. Updated "Embed MacRuby" Xcode  
target and added "Compile" Xcode target.
- Fixed a x86-64 ABI conformance bug where arguments should be passed  
by reference when there aren't enough registers to hold all of them.
- Create -copyWithZone: on every new Object-based Ruby class.
- Fixed a bug when break/next/redo statements inside exception  
handlers would not properly end potential landing pads.
- Fixed sprintf's %p to pass the object address.
- Fixed a bug in IO.popen.
- Added support for defined? on any unhandled expression.
- Swapped our custom Set implementation by the latest code from 1.9.
- Now generating and installing RDoc ri files.
- Added YAML support for Struct objects.
- Free parser node objects post-execution.
- Do not leak Match objects.
- Now deleting internal structures, IR and machine code of main  
functions created by #eval.
- Do not leak Regexp objects.
- Fixed a bug in Kernel#open when the given file was opened twice  
- Adding missing GC write barriers in Struct.
- Do not leak some of the oniguruma internal hash tables.
- Fixed a couple of ivar slot bugs.
- Fixed String#dump.
- Implemented YAML support for date/time.
- Working around missing 64-bit informal protocol annotations with  
- Safe quoting of YAML plain string scalars that look like non-strings.
- When generating the default objc runtime signature for a pure ruby  
method, if it starts by 'set' let's use 'void' instead of 'id'.
- Fixed a const lookup bug (always set the outer of a class to  
- MACRUBY_VERSION is now a string.
- Implemented #remove_method.
- Fixed a bug in String#dup where the receiver's class would not be  
- Added BigDecimal extension (experimental).
- Re-enabled File#flock.
- Fixed a bug where ivars would not work for some builtin subclasses.
- Implemented YAML.each_document.
- Fixed a bug when module_function was used as a scope visibility  
followed by -1 arity methods.
- Re-implemented #rand and #srand to use random(3) and srandom(3),  
faster and thread-safe.
- YAML now handles UTF-16 encoded strings.
- For a given CF type signature, also register an equivalent without  
the '=' character to conform to BridgeSupport APIs returning this type  
by reference.
- Fixed a bug in the BridgeSupport parser where an exception message  
would not be correct.
- A binding created from a method with a block passed-by now has a  
reference to this block and uses it during evaluation.
- Fixed many recursive bugs.
- Fixed a bug when loading scripts where the current VM state wouldn't  
be restored if an exception happened.
- macrubyc now generates executables linking against MacRuby.framework  
dynamically. For a static binary, the --static argument must be passed.
- Fixed a bug when the AOT bitcode would not be compiled as fully  
- LLVM's llc utility, required by macrubyc, is now installed inside  
the framework's bindir.
- macrubyc is now able to build fat binaries, accepting --arch  
- Implemented the rb_provided() method.
- Fixed many autoload bugs.
- Fixed a bug where non-specific tags for quoted YAML scalars would be  
- Implemented :inline format for YAML sequences and mappings.
- Implemented protected visibility check.
- Added support for AOT compilation of literal bignums.
- Fixed a bug when handling a sel_of_type argument where the selector  
may be nil.
- Fixed a bug in -[ByteString isEqual:] when the given object was not  
- Fixed KVO bugs.
- Fixed a bug where the return value of #initialize would be returned.
- Added DTrace probes: method:entry, method:return, raise.
- Fixed a compilation bug with variables declared inside class  
- Fixed the uncaught exception routine to not fail if there is no  


More information about the MacRuby-devel mailing list