[MacRuby-devel] experimental branch: status update

Laurent Sansonetti lsansonetti at apple.com
Sun Jul 26 23:52:47 PDT 2009


Here is another status update on the experimental branch. I forgot to  
send this one earlier, sorry.

Highlights:

- Unicode strings! You can now create strings containing multibyte  
characters in your MacRuby programs and apply the String methods on  
them (even regular expressions!).

- Digest extensions (bubblebabble, md5, rmd160, sha1, sha2) are now  
available.

- The readline extension is also available. It means macirb has  
history and editing features again! Unfortunately the bugs are still  
there, though :)

- The strscan C extension was rewritten in pure Ruby and imported into  
the repository. All the specs but one pass and new specs have been  
written too.

Changes:

- Fixed a regression in the instance variable lookup.

- IO#gets now returns tainted strings.

- Implemented Fixnum#popcnt, a MacRuby extension to Fixnum that counts  
the number of set bits in a number.

- Fixed a bug in rb_str_each_byte.

- Implemented ByteString#getbyte, ByteString#setbyte,  
ByteString#bytesize.

- Fixed a bug in the super dispatcher: now ignoring all call stack  
items before the receiver's implementation, to work around false  
positives in our stack check.

- Fixed the compilation of return from a higher level block (ex:  
1.times { 1.times { return } }).

- Fixed 2 compilation bugs in NODE_OP_ASGN1 (ex: a[1]||=1+1).

- Fixed a compilation problem where the LLVM sret attribute was  
applied to the return value of the C stub, and not the 1st argument as  
it should be.

- Fixed a lot of broken methods in Process and implemented a  
preliminary fork().

- Local variables used as dynamic variables should now be saved  
correctly even if an exception is raised.

- Implemented Kernel#select and ensured that all the specs pass.

- Re-enabled File#path, File#atime, made their specs pass.

- Re-enabled File#ctime and File#mtime, wrote File#chmod, fixed  
File.chmod, and made them all pass the specs.

- Implemented String#ascii_only? using CFCharacterSets.

- Re-enabled File#truncate and made sure it passes its specs.

- Fixed a pretty severe bug in IO#ioctl. (But if you're actually using  
ioctl, you're insane.)

- Delay the require of -r libs until the compiler is available.

- IO#lineno= now calls to_int on its inputs.

- Made the STDIN, STDOUT, and STDERR constants have a nice printable  
path.

- Lots of changes to make mkmf.rb work again.

- Fixed a bunch of serious IO bugs (especially in IO.copy_stream).

- Fixed a bug in the way we implemented break inside a block: now  
cleaning the broken_with VM value at the end of the dispatcher to  
avoid side-effects of pure Ruby calls of blocks vs C calls of blocks.

- Unlocked mutexes are now automatically unlocked once the thread that  
locked them dies (rubyspec conformance).

- Now raising an exception when trying to unlock a mutex that is  
locked by another thread (rubyspec conformance).

- Fixed bugs in Mutex#synchronize and thread's unlock all mutexes  
logic: do not raise exceptions (rubyspec conformance).

- Fixed the return value of attribute assignments.

- Fixed String#[] to work if the given range is larger than the  
string's length.

- Implemented Kernel#warn.

- Fixed +[MacRuby sharedRuntime] to initialize the shared compiler.

- IO#write: if the receiver isn't an IO object, dispatches the write:  
selector on it instead.

- Our rubyspec suite now includes library specs. spec:library will  
only run them, and spec:ci will also include them. Very important  
change: these rake tasks are now using the macruby executable (setting  
DYLD_LIBRARY_PATH to use the local libmacruby.dylib) and not miniruby  
anymore. It means you must build macruby before starting these tasks.  
If you hack on MacRuby, make sure to build the macruby:dylib task  
before starting the specs, otherwise your changes might not be taken  
into account by mspec!

- The digest C extensions (bubblebabble, md5, rmd160, sha1, sha2) have  
been ported to the new runtime APIs and are now compiled and  
installed. All their specs pass.

- Unicode work:  All strings coming from the parser are now compiled  
as unicode character arrays, then we generate CFString objects at  
runtime based on them. The final encoding of these strings is picked  
by CoreFoundation for us. The String#encoding method returns the  
fastest encoding of the receiver, which is generally MacRoman for  
ASCII strings and UTF16 for strings containing multibyte characters.  
It is now possible to apply regular expressions on strings containing  
multibyte characters, but it is not yet possible to create a regular  
expression containing multibyte characters yet.

This work is still under development and it is not yet compatible with  
the upstream 1.9 semantics of unicode strings. But at least you can  
create unicode strings in your MacRuby programs and use the String  
methods on them. Report us bugs please :)

Laurent


More information about the MacRuby-devel mailing list