Another week, another status update on the experimental branch! Highlights are: - A much better Cocoa support. We are almost as stable as trunk, I think. I was able to run a significant internal MacRuby application with the experimental branch. - The project is now able to be installed and used on Mac OS 10.6. It should theoretically work with the latest seeded build, using the same building instructions as mentioned in README.rdoc, and pass our spec suite. Please contact me offline if you have any problem or question, since 10.6 cannot be discussed here. - Lots of RubySpec-related work. We enabled most of the "core" specs and the spec:ci rake task is now running about 15,000 expectations (vs 2,000 before). Several bugs discovered by these RubySpec were fixed, but surprisingly we didn't have so much failing specs. Huge kudos to Eloy! - Patrick started working on optimizing floating point arithmetic (in a branch, called fp-optimized-experimental). The idea is to make Float objects immediate so that we don't have to allocate memory in order to do float arithmetic. The work is still under progress, it will be merged back to the experimental branch once it's done and stable. Changes: - Fixed a crash when trying to symbolicate a backtrace when the JIT compiler has not been initialized yet (command line argument parsing). - Disable the recursive dispatch optimization in case there is an arity mismatch (optional arguments). - Fixed a bug in the #send optimization compilation where the basic block created by the exception handler was not honored. - Fixed a GC-related bug in File.readlink. - Removed the builtin oniguruma copy which wasn't working great with our GC, because it was using GC memory and missing some write barriers, and added a snapshot of the latest one (5.9.1) which works using regular malloc memory. - Fixed several bugs in the way we create CF IO streams and do error reporting. - Fixed lots of 10.6-only bugs in the way we check for mutability on builtin types (string, array, hash, set). - Fixed a critical bug in the code path that was used to verify if a given builtin type is tainted or not. - We now require LLVM revision 72741. The MacRuby source code won't compile anymore with the previous revision because of an API change in LLVM. Markus Prinz graciously offered a binary installer for this very specific version of LLVM that you can use instead of compiling your own (read http://lists.macosforge.org/pipermail/macruby-devel/2009-June/001908.html for more information). - When subclassing a builtin type class, only insert the mutable primitives if the subclass is the mutable version of this builtin type. - Don't forget to reload class constants every time a new framework is loaded. - Fixed a bug when we weren't actually passing the method selector from the dispatcher to -2 arity methods defined in C. - Added some preliminary support to call variadic C functions / Objective-C methods. - Implemented implemented String#bytesize and String#each_byte. - Fixed Bignum#+. - ByteString objects can now be frozen/tainted. - Define Encoding::ASCII_8BIT as a shortcut to US_ASCII (for now). - Fixed ByteString#encoding to always return US_ASCII (for now). - Implemented the undefinition of methods. - Undefined Symbol#to_str. - Fixed lex_io_gets_fast() to deal better with scripts containing non- ASCII characters. This allows us to parse and compile scripts containing non-ASCII characters. - Fixed a bug in the file loader, when the given path is absolute and contains the file extension. - Ported process.c to the new runtime API. - Implemented File#chown. - Before calling #method_missing, raise an ArgumentError in case we tried to call a method with an argument when there exists a method under the same Ruby name that accepts no argument. - Made Eumerator a top-level class. - Fixed lots of bugs in the Struct class, it's now usable again. - Fixed bugs discovered by RubySpec in the following Array methods: #choice (deleted), #concat, #fill, #flatten, #initialize, #insert, #pack, #push, #sample (added), #sort, #unshift, #zip, - Fixed bugs discovered by RubySpec in the following String methods: #capitalize, #center, #chomp, #delete, #downcase, #dump, #gsub, #ljust, #rjust, #squeeze, #sub, #swapcase, #tr_s, #tr, #upcase - Enabled most of the RubySpec core specifications! Laurent