[MacRuby-devel] MacRuby 0.9 release notes

Laurent Sansonetti lsansonetti at apple.com
Fri Feb 25 14:25:49 PST 2011

Here are the release notes for MacRuby 0.9! An e-mail announcing the release will be following.


- Lots of stability fixes (crashers, memory leaks and race conditions), and a few performance improvements.
- The internal representation of Strings changed from a dual binary / UTF-16 model to a pure binary one, principally to avoid problems in multithreaded applications. Performance should remain the same in most cases.
- The macruby_deploy program has been enhanced to embed RubyGems (with dependencies) and BridgeSupport files. See the new respective --gem and --bs options.
- The libmacruby-static.a library is not built by default anymore, because static compilation is still a work in progress.
- Upgraded to RubyGems 1.4.2.


- Fix a bug in IO.open() where numeric file descriptors could not be passed as the first argument.
- Fix an assertion that could happen when calling #methods & friends on a class that contains a method name larger than 100 characters.
- Fix a bug in IO.open() where the given path would not be handled as a path (calling #to_path if necessary).
- Fix a bug in the YAML extension where yajl_free() would be called on a NULL pointer.
- Fix a bug in the OpenSSL extension, when calling ossl_pkey_sign().
- Fix a bug where calling a method defined with #define_method with a block accepting a splat argument (arity -2) would crash.
- Fix Ruby warnings in the YAML extension.
- Fix a bug when some splat methods defined with #define_method() would segfault at dispatch time.
- Improve the internal rb_eql() routine for performance, makes faster hash lookup / keys comparison operations.
- Improve the hashing function for Arrays.
- Move the conformsToProtocol: and performSelector: default logic on direct pure-Ruby subclasses.
- Fix a bug in IO#close_write where IOError would not be thrown if the stream was readable and non-duplex.
- Fix a bug in IO#write where an exception would be raised if the stream was read-only when writing 0 bytes of data.
- Fix a bug in Kernel.require where a file path starting with '~' would not be loaded.
- Fix a bug in String#gsub! where we would segfault during string concatenation.
- Fix a bug in the compilation of scopes where the current_block_arg state variable wouldn't be re-entrant (this fixes the compilation of the mechanize library).
- Fix bugs in String#inspect when called on a string that contains invalid and non-BMP characters.
- Fix a potential memory crasher in String#sub and String#gsub where free'd memory would be reused.
- Fix a bug where $FILENAME, $* and $-W could be changed.
- Fix a bunch of bugs in Array methods where SecurityError would not be raised when $SAFE is 4.
- Fix a bug in Kernel#untrust where an exception would not be raised on a frozen object.
- Fix a bug in Kernel#trust where an exception would not be raised on a frozen object.
- Fix a bug in Kernel#trust where an exception would not be raised if $SAFE is equal or greater than 3.
- Fix a crash in Rational#rationalize due to registering the method with a wrong arity.
- Fix a bug when we would free outer memory but still keep outers pointing to that memory location, causing crashes later during const lookup (this fixes rspec).
- Fix a bug in Struct#hash when called on recursive structs.
- Fix a bug in Array#== when called with recursive arrays.
- Fix a bug in StringIO#puts when called with recursive arrays.
- Fix a bug in Exception#== when an infinite loop would be entered when comparing exceptions from different classes.
- Fix a bug when #initialize_copy would not raise an exception when called on Object or BasicObject.
- Add support for encodings ISO8859_{2..16}.
- Fix a bug in String#search_codepoint where breaks were ignored.
- Fix a bug in OpenSSL::BN#to_s.
- Fix a bug in OpenSSL::PKey::DH#compute_key.
- Fix a bug in OpenSSL::X509::Attribute#to_der.
- Fix a bug in OpenSSL::PKCS5.pbkdf2_hmac(_sha1).
- Fix a bug in OpenSSL::PKey::DSA#syssign.
- Fix a bug in OpenSSL's ossl_x509store_initialize() function where an internal value would not properly be initialized.
- Fix a bunch of bugs in Array methods where an exception would not be raised when passing very large indexes or ranges.
- Fix a bug in Array#inspect where an untrusted string would not be returned.
- Fix a bug in String#unpack when called with a block.
- Add support for variadic objc method dispatch in the parser.
- Fix a bug in Socket.pair where the sockets would not be yielded when passing a block.
- Fix a bug in Socket.pair(domain, type, protocol) and Socket.new(domain, type, protocol) where protocol would not be an optional argument.
- Fix a bug in Socket.getservbyport(port) where a port outside the uint16 range would be accepted.
- Fix a bug in Socket.getservbyport where the network byte order value would not be passed to the underlying API.
- Fix a memory leak and potential crasher in Regexp's internal rb_reg_matcher_new() function.
- Fix various memory leaks and potential crashers in code paths that require binary -> UTF-16 conversions.
- Fix a bug in OpenSSL::BN#prime?.
- Add the #size class method on BridgeSupport struct classes. Example, NSRect#size returns the same as sizeof(NSRect) in C.
- Fix a bug in OpenSSL::SSL::SSLSocket#cert.
- Fix -[MacRuby evaluateFileAtPath:] to behave like #require, so that it can also handle .rbo or .bundle files.
- Fix a bug when sending KVO notifications on immediate objects would cause a crash.
- Cleaned out all public header files.
- Fix a bug in Sandbox.new where passing a non-String object would cause a crash.
- Add rb_str_plus() CRuby API.
- Fix a bug in {Thread,ThreadGroup,Mutex}#alloc where we would not return objects from the current class (could be a subclass).
- Fix a bug in Kernel#public_method where an exception would not be raised when called without public methods.
- Fix bugs in Module#{remove_method,undef_method,public} to honor untrusted state.
- Add Pointer.magic_cookie to create pointers with arbitrary values (must fit in a long). Example: Pointer.magic_cookie(42).
- Fix a bug in Module#method_defined? where false would not be returned was passed the name of private method.
- Fix the compilation of C blocks to not use a global variable to store/load the Proc object to call, but instead retrieve a reference to it from the block literal argument. This fixes nested C blocks.
- Fix a bug in Kernel#<=> will 0 would not be returned when receiver's == return true.
- Fix a bug in Module#public_method_defined? where true would not be returned when was passed name/symbol of public method.
- Fix a bug in Array#pack with format "fFeEdDgG" to raise a TypeError when does not convert into float.
- Fix bugs in #sprintf when passing the following formats: "%# x", "%010.4f", "%010.4u".
- Fix a bug in String#unpack with format 'Q' to add add nil for each element requested beyond the end of the String.
- Fix a bug in String#scan to return an Array object with each element tainted or untrusted when #scan returns nested arrays.
- Fix a bug in Array#[]= to check frozen state before attempting to coerce arguments.
- Fix a bug in String#initialize to raise a RuntimeError if self is frozen.
- Fix a bunch of bugs detected by clang's link time optimization (LTO). 
- Fix a bug in -[NSArray ==:] and -[NSDictionary ==:] where a crash would occur if passed a Ruby immediate type.
- Fix bugs in String#each_char and String#ord to now raise an exception if the String contain invalid characters.
- Fix a bug in String#ord to return the byte value even if a it's not an ASCII character.
- Fix a bug in the dispatcher where free'd memory would be accessed.
- Fix a bug in #at_exit when the process would abort if a block raised an exception.
- Fix a bug in Array#delete where we would check if the receiver can be modified *after* modifying it.
- Fix a bug in Mutex and ThreadGroup where modifying internal array structures under SAFE level of 4 would raise an exception.
- Fix a problem in #load: instead of crashing if we cannot locate the entry point of a .rbo file, raise an exception with a message explaining the most common problem cause instead.
- Fix a bug in the compilation of the 'next' expression which would not honor ensure blocks.
- Add support for #define_method when passing Method.
- Fix a bug in StringScanner on multiline strings.
- Fix a bug in macirb where a syntax error would exit the program.
- Improve the performance of #pack with most flags by pre-allocating the result bytestring, to avoid too-much frequent memory reallocations.
- Fix a 32-bit precision bug when converting Time objects to NSDate objects.
- Allow Float objects to be trusted/untrusted and tainted/untainted.
- Fix the default value of BasicSocket.do_not_reverse_lookup to be true.
- Fix a bug in Thread.kill when passing a non-Thread object would cause a crash.
- Fix calls to -[NSString fileSystemRepresentation] to catch potential exceptions.
- Fix a bug in macruby_deploy with --embed where the main application's executable's link path would not be updated.
- Fix a bug in macruby_deploy with --embed to now delete the Current symlink as it seems to cause the AppStore validation process to fail.
- Add the Errno.code method to return the current errno value.
- Fix a race condition bug when generating internal class names where concurrent access would cause runtime problems.
- Add missing CRuby API rb_thread_blocking_region().
- Fix a race condition bug when spawning a new VM instance and copying the current VM dispatch cache.
- Fix a memory leak when resolving JIT methods.
- Fix a race condition bug when dispatching and resolving a method at the same time.
- Fix lexical const lookup bugs inside modules defined using the :: notation.
- Fix const lookup calls to include necessary DWARF metadata, in order for #const_missing calls to appear in backtraces later at runtime. 
- Change the framework's bundle identifier to use macruby.org instead of apple.com.

Tickets closed:

#1155	Embed BridgeSupport Files
#1067	Segfault occurs when calls Struct#hash with recursive structs.
#1116	Yet another String performance issue
#1122	Inspection of NSArray stops at unicode char
#1134	The new code for next/ensure does not work properly
#1133	Silly syntax error crashes macirb
#1124	string.ord returns 0xFFFF for all characters 0x80 or greater in binary string
#1075	rdoc is way too slow as of r5059
#1160	Need ability to access errno from Ruby code
#1055	running RSpec with MacRuby 0.9 r5038 and greater causes seg. fault
#1070	rspec2 segfaults when I try to run it
#1136	Array#pack performance w/ base64 strings
#1087	Assertion fails when Array#[]= was specified with very large index.
#1143	Dates in 32-bit converted from NSDate are not precise enough
#1142	Array#pack performance while converting array of ASCII values to string
#1137	macruby_deploy should automate gems embedding
#1083	Segfault occurs when calls the String#unpack('i') with block.
#1054	Assertion failed. "(arity >= 0), function compile_block_caller"
#1040	Dalli test suite crashes
#1088	Performance: String#* is very slow.
#1039	Bundler fails with TypeError: can't convert Pathname into String
#1076	Abort occurs when raise a SecurityError within Thread.
#1074	Abort occurs when install the rubygems.
#1078	segfault when trying to use macgem to install a gem
#1092	Unable to Update MacRuby Gems
#1127	Access to freed memory in rb_vm_dispatch
#868	Should not get a value until calling Hash#rehash when Object of Hash's key was changed.
#1080	Add #size method for C struct classes
#1043	Cocoa Binding broken
#1045	restclient gem fails when trying to GET
#1081	API function for loading RBO files from Objective-C environment
#1105	upgrade to rubygems 1.4.2
#1106	#initialize is not called in class which inherit Mutex.
#1107	Need to implement rb_str_plus.
#1047	Clean up warnings when installing gems
#1009	Can't set status of taint and untrust to Float Object.
#1132	Reopening a class modifies it
#1050	Segfault occurs with Rake::namespace.
#766	macrake overrides /usr/bin/rake
#1125	case insensitive fs require bug
#1109	Installing a gem from disk fails
#1051	Segfault occurs with RDoc::Parser::Ruby.
#1034	Requiring Mechanize gives segmentation fault
#1123	does not process the "ensure" when called the "next".
#1112	Allowing pointers to be created and initialised directly with an integer
#1121	Assertion failed: (boundaries.start_offset_in_bytes <= offset_in_bytes)
#668	Newlines and carriage returns cause erroneous matches in StringScanner
#1048	Performance of Hash with an Array as a key
#106	Syntax error with Variadic function
#1077	Performance of String
#1084	Abort occurs when was passed Object of Method to define_method.
#1062	Segfault occurs when calls Rational#rationalize with no arguments.
#1019	String#gsub performance
#1058	Segfault occurs when Array#== handles recursive array.
#1060	Segfault occurs when StringIO#puts handles self-recursive array.
#1063	Segfault occurs when compare the objects of Exception.
#1113	unexpected behaviour with enumerateObjectsUsingBlock
#1131	Abort: exception is not caught when open the file which is not existing in at_exit block.
#1115	Bundler not working since updating to rubygems 1.4.2
#1128	MacRuby builds broken gems, probably since 1.4.2 update
#1072	macgem is broken in trunk
#1073	Allocation/free errors popping up when I try to autocomplete in macirb
#1150	Segfault occurs with Thread.kill when was passed Object other than Thread.

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

More information about the MacRuby-devel mailing list