MacRuby 0.9 release notes
Here are the release notes for MacRuby 0.9! An e-mail announcing the release will be following. Highlights: - 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. Changes: - 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. Laurent
Hi Laurent, macruby_deploy --gem sounds neat :) With regards to statically linking, is it preferred that you ask someone using your application to download MacRuby separately, or can you feel safe that statically linking will be okay? Thanks. - Rob
Hi, I try to use macruby_deploy --embed. There is three symlinks in the MacRuby.framework of my application's bundle : Headers -> Versions/Current/Headers MacRuby -> Versions/Current/MacRuby Resources -> Versions/Current/Resources Unfortunatly there is not directory named Current in the directory Versions. Indeed, If I run macruby_deploy with the --verbose option, I can see : rm -rf 'build/Release/Leonhard.app/Contents/Frameworks/MacRuby.framework/Versions/Current' I can't test (for now) if my app will run on a Mac with no MacRuby installed. Unfortunatly, those symlinks disrupt choctop. Did I miss something ? Is it a problem with my MacRuby installation ? Or a bug ? Greg 2011/2/26 Rob Gleeson <rob@flowof.info>:
Hi Laurent,
macruby_deploy --gem sounds neat :) With regards to statically linking, is it preferred that you ask someone using your application to download MacRuby separately, or can you feel safe that statically linking will be okay? Thanks.
- Rob _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
Hi, (again) There is another broken symlink : MacRuby.framework/Versions/0.9/Headers Greg 2011/2/26 Gregoire LEJEUNE <gregoire.lejeune@gmail.com>:
Hi,
I try to use macruby_deploy --embed. There is three symlinks in the MacRuby.framework of my application's bundle :
Headers -> Versions/Current/Headers MacRuby -> Versions/Current/MacRuby Resources -> Versions/Current/Resources
Unfortunatly there is not directory named Current in the directory Versions.
Indeed, If I run macruby_deploy with the --verbose option, I can see :
rm -rf 'build/Release/Leonhard.app/Contents/Frameworks/MacRuby.framework/Versions/Current'
I can't test (for now) if my app will run on a Mac with no MacRuby installed. Unfortunatly, those symlinks disrupt choctop.
Did I miss something ? Is it a problem with my MacRuby installation ? Or a bug ?
Greg
2011/2/26 Rob Gleeson <rob@flowof.info>:
Hi Laurent,
macruby_deploy --gem sounds neat :) With regards to statically linking, is it preferred that you ask someone using your application to download MacRuby separately, or can you feel safe that statically linking will be okay? Thanks.
- Rob _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
participants (3)
-
Gregoire LEJEUNE
-
Laurent Sansonetti
-
Rob Gleeson