[MacRuby-devel] trunk status update
lsansonetti at apple.com
Mon Nov 16 18:23:16 PST 2009
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
- 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/
- 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
- 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
- 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