[MacRuby-devel] MacRuby 0.8 release notes

Laurent Sansonetti lsansonetti at apple.com
Mon Dec 13 19:32:54 PST 2010

Hi guys,

As promised, 0.8 is now released! It's now available in http://www.macruby.org/files/ and I will push a new website later today with a blog article.

I would like to thank everyone who participated to this release, reporting bugs and patches. And special thanks to watson1978 who contributed a huge number of changes.

trunk (and tonight's nightly build) is now using the 0.9 version number. Let's continue fixing the bugs in our 1.0 milestone!


Lots of compatibility and stability fixes.
Minor enhancements to the Cocoa development support.
macirb (DietRB) now supports auto-indentation and completion.


Fix a bug in Digest.digest and Digest.hexdigest when passing the algorithm name.
Fix a bug in Date when not using nsec in substitution for subsec.
Fix a bug in Date.httpdate when an exception "undefined method `size' for nil:NilClass'" was raised.
Fix a bug in #define_method when passed an objc-style selector.
Implement rb_str_modify() MRI API.
Fix a bug in the compiler when converting invoke instructions to call, where debugging metadata would not be properly transfered.
Fix a bug in -[NSArray ==:], make sure it returns false in case the receiver isn't an NSArray, instead of raising an exception.
Fix a bug in Benchmark::Tms#add! when a NameError would be raised.
Fix a bug in CMath.cbrt, when passed a negative value as argument.
Introduce Dispatch::Object which becomes the mother class of all Dispatch classes.
Introduce Dispatch::Object#dispatch_object which returns a raw pointer to the internal libdispatch type.
Fix a bug in BridgeSupport, by avoiding sanity pointer type comparison check in case the given pointer type is 'C'.
Fix missing connections in MacRuby Document-based Application template.
Fix a bug n String#split(sep, limit), when passed value to limit.
Introduce String#pointer which returns a Pointer object wrapping the string's internal storage.
Improve current algorithm to calculate line numbers in stack traces.
Fix a bug in BasicSocket#close_{read,write} where the actual fd would be left intact.
Fix a bug when creating a NameError exception where calling #inspect on the receiver object would raise an exception and cause an infinite loop.
Fix a bug in BasicSocket#close_{read,write} where we wouldn't raise an exception in case the stream was already closed
Fix a bug in BasicSocket#{listen,setsockopt} where we wouldn't raise an exception in case the stream was already closed
Fix a bug in StringIO#read(length). Should return empty string when specified 0 to length.
Fix a bug in StringIO#read(length, buffer). Should set empty string to buffer when calls at EOF.
Fix a bug in File#size. Should throw an IOError exception when calls with closed stream.
Fix a bug in the compilatin of #eval statements with Binding objects. When creating a binding, keep a reference to the top one.
Fix a bug in IO#sysread where it should throw an EOFError.
Fix a bug in IO#sysread(length). Should return empty string when specified 0 to length.
Implement rb_protect() and rb_jump_tag() MRI API.
Add a sample showing how to use CoreLocation to find the user's location and open it in a google map page using the default browser (Scripts/locator.rb).
Fix a bug in the super dispatch when we try to super call a method under the same selector as the current one but on a receiver from a totally different class hierarchy.
Improve +[MacRuby sharedRuntime] to make the load path relocatable in case MacRuby.framework is embedded in a .app.
Improve stack traces by now including yield statements. Attach DWARF metadata when compiling yield calls.
Fix a bug in Method#call where the method cache would not be used.
Implement rb_str_split() MRI API.
Implement rb_hash_tbl() MRI API.
Implement rb_global_variable() MRI API.
Implement rb_iterate() MRI API.
Remove Leopard hacks since it's not supported anymore.
Fix a bug in the compilation of bitfield types. Raise an exception in case the type string is invalid except of crashing the process (as we might be calling from Pointer.new).
Improve Pointer.new by supporting :boolean/:bool as a shortcut to 'B', and :selector/:sel as a shortcut to ':'.
Implement rb_gc_register_address() MRI API.
Introduce Pointer#+ and Pointer#- to allow the user to change the offset of a pointer (returning a new pointer object).
Change Pointer.new to only accept Symbols for type shortcuts.
Fix a bug in BridgeSupport by disabling a check when converting bignums into unsigned long longs as it may trigger false positives when using certain Cocoa APIs.
Fix a bug in the io.h header file, making sure it can be included without CoreFoundation.
Fix a bug in File.expand_path to not resolve symlinks.
Fix a bug in #methods and friends to not include unavailable (undefined, etc.) methods.
Implement rb_call_super() MRI API.
Implement rb_num_coerce_relop() MRI API.
Fix a bug in BigDecimal to throw exceptions when compared with nil.
Fix a bug in IO#gets(nil). Will return all data which was read from the stream.
Fix a bug in IO#gets(nil, limit). Will return data of limited length.
Implement rb_obj_instance_eval() MRI API.
Introduce Kernel#getpass method, which wraps the getpass(3) API.
Fix a bug in the compilation of var slots, where binding slots would be taken first before block dynamic slots.
Fix a parser bug by removing useless range literal optimization.
Fix a bug in IO#gets(limit). Will return nil when calls at EOF.
Fix a bug in IO#readlines(limit) when an infinite loop could be entered.
Fix a bug in IO#gets(0) to return empty string.
Fix a bug in IO#gets(sep, 0) to return empty string.
Update DietRB to 0.6.0 which adds auto-indentation and file path completion in strings.
Improve the compilation of converter routines, by now supporting C-style arrays ('[' ... ']' runtime type).
Fix a bug in IO.readlines, when the last element wasn't returned.
Fix a bug in BrigeSupport, when doing sanity pointer type check, ignore '=' characters in type signatures.
Fix bugs in IO#dup and IO#binmode. Will raise an IOError exception with the closed stream.
Fix warnings in BridgeSupport when poking for the __octype__ hidden boxed ivar.
Fix bugs in IO#close_{read,write} to not wait completion of child process.
Fix a bug in IO.popen to properly cononect the pipe into the stdin of the child process.
Implement pipeline support in IO.readlines.
Fix a bug in IO.read to close resources surely, in case an exception happens.
Fix various bugs in ARGF methods, #each_{line,byte,char}, #getc, #read, #readlines, #getbyte, #read{char,byte,line}, #chars, #lines, #bytes.
Fix a bug in the IO layer to dispatch a message to #write instead of calling the default method directly. This fixes bugs in Zlib::GzipWriter#putc, #print, #printf and #<<.
Fix a bug in StringScanner#rest when it would return nil sometimes.
Fix various String methods, to copy the status of the taint and untrusted flags.
Fix a bug in String#sub! to throw an exception with frozen string, also when replacing was not performed.
Improve the Xcode MacRuby apps entry point, by automatically loading the BridgeSupport files of frameworks linked into the product's executable.
Change +protocolWithName: method signature.  This will avoid the Objective-C runtime to think the returned object is an Objective-C object, which would issue warnings and crash.
NSObject's conformsToProtocol: methods will check if given Ruby classes implement the protocol methods, at runtime.
Fix various formatting bugs in #sprintf().
Fix a bug in the rake clean:rbo Rakefile task, making sure to remove the C extensions' rbo files too.
Fix warnings in macirb.
Fix a bug in String#setbyte.
Fix a 32-bit ABI issue when calling a C function returning a struct that can fit inside a 64-bit integer (such as NSPoint).
Fix a bug in BridgeSupport by not raising a TypeError exception when passing any pointer as an void-...* argument (before this change, only void* arguments where ignored).
Implement \G support in regexp layer.
Fix various bugs in Array#pack.
Fix a performance bug by no longer registering all Objective-C classes as constants after calling #framework, which had the side effect of waking them up, messaging their +initialize method). Instead we now always use the dynamic resolver.
Fix a bug in Kernel$$+.
Implement StringIO#external_encoding and StringIO#internal_encoding.
Fix a performance memory allocation bug, by making sure Match objects created from the same string keep a reference to a unique, frozen string object.
Undefine Symbol#to_str.
Fix a bug in Array#join to return a string when the given array includes an object responding to to_ary/to_str/to_s.
Fix a bug in the YAML extension when parsing numeric strings.
The Foundation framework is now marked as multithreaded by default.
Improve the support of Dir.tmpdir.
Fix bugs related to the compilation of C-level blocks. Now allocate them in the autozone heap and emit a write barrier to the original ruby Proc object, to avoid premature garbage collection of the Proc when calling the C-level block.
Fix bugs in String#chop and String#reverse, to work properly with non-BMP characters.
Fix install permissions for Info.plist and InfoPlist.strings.
Fix a string comparison bug, by making ascii-only strings now compatible with any other string.
Implement $_ (last time) variable setters.
Make NSObject's performSelector: and friends dispatch pure-ruby methods properly.
Fix a bug in Dir.glob to convert paths to unicode normalization form C.
The compiler is now using LLVM 2.8.
Remove the lib/dispatch layer.
Fix a bug when STDIO file descriptors could be closed.
Fix a bug in Array#uniq, to not remove the element of the array when object type is different.
Fix a bug that prevented CSV from parsing all multi-line fields correctly.
Fix various Webrick bugs.
Fix IO.open to not raise a warning in case a block is passed.
Fix a bug in String#lines to yield the paragraph when passed ''.
Implement Module.nesting.
Fix a bug in String#delete (and friends) when an escaped dash character in the transliteration pattern would still be interpreted as a range.
Fix a bug in IO#close, #close_{read,write} to throw SecurityError when $SAFE is 4.
Fix various bugs in Array#product.

Tickets closed:

ticket	summary
969	Need to implement rb_gc_register_address
720	methods from define_method() can't be performed from ObjC
281	Bundles pointing to local MacRuby installation instead of embedded
922	Writing a MacFUSE fs doesn't work when delegating methods
143	macgem does not set chmod +x on files in archive
944	MacRuby should throw an IOError exception when calls Socket#listen #setsockopt with closed socket.
1012	Inconsistent Regex behaviour
493	signals cannot be intercepted
936	Kernel#caller reports the wrong line numbers
978	macirb gives a weird error when I dereference a pointer to a CFArray
981	File.expand_path should not return actual file path with Symbolic link.
1015	mark Cocoa as multithreaded by default
979	Find.find standard library broken in macirb
940	MacRuby should throw an exception when calls IO#read/write without status of READABLE/WRITABLE.
238	rdoc memleaks & segfaults when installing gems
1026	IO::open give a warning when passed a block
993	Assertion failure : vm.cpp
783	Patch for builder.rb error: invalid byte sequence in US-ASCII
782	Segfault occurs with exception is raised from object with broken #inspect
540	segfault with NSURLDownload with GC on
1003	Copied Proc objects cause crash when used as Objective-C blocks
906	Double BOM force_encoding bug (from HAML)
887	calling join on an Array of BINARY Strings returns UTF-8, may raise Encoding::CompatibilityError.
823	String comparison issues when different encodings are used
925	MacRuby use an insubstantial rb_str_modify() in ossl_ssl.c
1022	move to llvm 2.8
955	Problem printing arrays in 0.7
956	macirb NSArray ArgumentError
943	tab completion of files crashes macirb
831	Received request header with Webrick HTTPD is broken after GC is executed.
737	Unpack inconsistencies (possibly related to issue #605?)
1008	Can't get the last line from $_. Need to implement rb_lastline_get and rb_lastline_set.
952	Should set got string to $_ when calls StringIO#gets #readline.
288	miniruby bench on 32 bit fails
895	MacRuby crashes when trying to parse an XML document with nokogiri
923	Kernel#caller returns an empty stack trace
959	CALayers can have a problem resolving method in superclass.
957	[Macruby sharedRuntime] should relocate paths when embedded in a Objective-C app
966	MacRuby encoding error with Mail gem
632	performSelector behaves oddly.
19	Problems with method_missing
105	BridgeSupport can't convert KCGSessionEventTap as an argument for CGEventTapCreate
428	AOT compiled script can't get rescued
928	"MacRuby throws an exception of ""undefined method `size' for nil:NilClass'"" with Date.httpdate."
924	"MacRuby throws an exception of ""Unsupported digest algorithm (OpenSSL::Digest::MD5)."""
945	MacRuby should throw an IOError exception when calls Socket#close_read #close_write with closed socket.
964	Need to implement rb_global_variable
985	Need to implement rb_obj_instance_eval
965	Regexp literal with options broken in macirb
926	"MacRuby throws an exception of ""undefined method `subsec'"" with DateTime#inspect."
932	MacRuby Document-based Application template missing connections, etc
934	passing Dispatch::Queue#dispatch_object to FSEventStreamSetDispatchQueue fails
929	Colons are always appended to the selector during define_method
664	MacRuby Crashes When Scheduling a Block to Run on the Main Thread from a Background Thread
933	String#split(sep, limit) is broken when specified a limit.
963	Need to implement rb_iterate
927	"MacRuby throws an exception of ""undefined method `subsec'"" with Time#iso8601."
967	Boolean pointer creation assertion
982	Class#public_instance_methods keeps reporting methods after removing them
983	Need to implement rb_call_super
984	strange scoping error in macirb
1028	Strings generated by a directory listing of files with Unicode chars in name cannot be compared
974	Failed assertion when creating pointer Pointers
971	Pointer constructor bug
973	EventMachine fails to build.
1032	dispatch library should be removed
999	Handle Obj-C protocols better in MacRuby
648	"(TypeError) ""unrecognized runtime type"" when receiving a CGEventTapProxy"
576	It's possible to close STDOUT (and presumably other standard IO streams)
968	"""NATIVE"" symbol is not solved within rubygems."
961	MacRuby trunk doesn't show the correct file and line numbers in stacktraces involving blocks
772	Assertion fails with 4 bytes non-BMP UTF-8.
962	Appscript framework causes EXC_BAD_ACCCESS error with MacRuby 0.7
990	Calling some CGContext functions raises 'instance variable __octype__ not initialized' warning
1013	Segmentation fault when using readline
1000	Xcode fails to load bridgesupport file automatically for user created framework
520	Confusion in data type names for Core OpenGL
1010	NSPoint/CGpoint =>NaN
135	macgem won't install hpricot
1011	Sinatra fails silently on MacRuby 0.8 nightly builds
1004	warnings when running macirb
1006	rake clean target is now missing intermediate build results
267	Change permissions on Info.plist and InfoPlist.strings
382	undefined constants in Snow Leopard
1014	Unhelpful error message when loading the restclient gem
829	Retrieving a list of local variables from a Binding instance fails
1002	AXUIElement functions won't accept Pointers of type :id
865	"String#lines(separator) is broken when specified separator == """"."
432	Module.nesting not working
1001	All future significant numbers should be novelty tickets
975	macri requires superuser permissions to update cache
91	rss module doesn't work - problem in dublincore.rb or module_eval
500	DRb problems
421	MacGem reports wrong executable directory
848	Recieving SIGABRT signal from GDB

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20101213/6b219656/attachment-0001.html>

More information about the MacRuby-devel mailing list