[MacRuby-devel] MacRuby 0.7 release notes

Laurent Sansonetti lsansonetti at apple.com
Fri Oct 1 21:44:23 PDT 2010

Hi guys,

MacRuby 0.7 is now ready to be released. I created a branch called "0.7" which might host minor fixes, and I'm now working on preparing the release and announcement post. It should now be released very soon, likely Monday (we want to do more testing).

In the meantime, trunk becomes MacRuby 0.8, where the story continues!

Thanks to everyone working on this release, which closes a successful 5 months development cycle.

Following are the complete release notes, the upcoming announcement post will be clearer :-)


* Better Ruby compatibility. Better C extensions support. This release has about 90% of RubySpec coverage.
* Better concurrency. Dispatch cache has been rewritten to be thread safe. Fixed several race conditions and deadlocks. MacRuby can now handle a significant number of concurrent HTTP requests through ControlTower. Fixes and improvements in the Dispatch library.
* Better Cocoa support. Reduced runtime overhead, fixed minor problems and simplified the integration with Cocoa classes. C-style blocks are now supported in MacRuby, assuming you install the new BridgeSupport preview release. The sandbox(7) functionality is now exposed in the Sandbox class.
* Better performance. MacRuby's kernel primitives are now pre-compiled into LLVM bitcode and inlined later into the module. Fixed minor performance regressions introduced in last release. Optimized codegen, instance variables and multiple assignments. In JIT mode, cold paths are now interpreted and not JIT compiled. Introduced a regression performance suite.
* MacIRB has been rewritten from scratch. The new version (called DietRB) is lighter and better implemented. It should be compatible with the old IRB.
* Started working on static Ruby compilation, which generates executable binaries embedding the MacRuby runtime, not making use of the JIT compiler or BridgeSupport runtime metadata. This is a work in progress and we intend to finish it in the next release.
* Mac OS v10.5 (Leopard) is no longer supported. We require MacRuby users to upgrade to Snow Leopard.

Other changes:

* Fixed clang/clang++ build.
* Fixed a crash when trying to create a byte string out of an empty NSString.
* Fixed a small typo in the compilation error message.
* Fixed a bug when bridgesupport files for linked frameworks wouldn't be loaded.
* Fixed a crash when calling #to_json on a symbol.
* Fixed a bug in Method#call which would incorrectly change the safe level.
* Now filtering the symbols we expose in the macruby dylib.
* Avoid calling xmalloc() with a zero size (fixes several performance problems).
* #sysread with a len argument must return a binary string, not UTF-8.
* Allow Pointer objects of type 'c' to be passed as C-style char arrays.
* Fixed a bug in NSString#== where an exception would occur if the operand cannot be converted as a string.
* Got rid of the NSNumber glue, it's useless since NSNumbers are always converted.
* In case we are in a .app with MacRuby.framework embedded inside, relocate the load paths accordingly.
* Deal with numeric escapes in regexps.
* Symbol#to_proc now generates a Proc that can accept a variable number of arguments.
* Fixed minor bugs in symbol and enumeration.
* Implemented of String#encode.
* Fixed String#each_byte to return positive numbers.
* Made NSObject#== and NSObject#eql? use -[NSObject isEqual:].
* Fixed minor bugs in Array and implemented #rotate, #rotate!, #select!, #keep_if, #sort_by!.
* More robust runtime signature parsing, by dynamically allocating the temporary buffer instead of using a static array (which might be too small when parsing big signatures like in CoreAudio).
* Be careful when compiling the struct #new method, some fields might be large (ABI-wise) structures.
* Fixed minor bugs in Dir, implemented #home.
* Create symbols from the auto zone, allowing associative references to work without emitting warnings/errors.
* Fixed minor bugs in Enumerable and implemented #flat_map, #collect_concat, #each_entry, #each_slice, #each_cons, #each_with_object.
* Fixed a bug in the compilation of the alias keyword, some arguments can be interpolated symbols (not literals).
* Removed the sigbus/sigsegv signal handlers, let macruby crash immediately to make the life of crashtracer easier.
* Fixed minor bugs in Enumerator and implemented #each_with_object, #with_object.
* Fixed minor bugs in File and implemented #absolute_path and #size.
* Backported latest net/http from ruby trunk.
* Fixed minor bugs in Fixnum and implemented #magnitude.
* Fixed minor bugs in Float and implemented #rationalize.
* Added some missing MRI C-APIs.
* Added support for the nkf extension.
* Fixed a bug when popping exceptions from compiled code.
* Fixed minor bugs in the GC module.
* Made the division of negative fixnums behave like MRI.
* Fixed minor bugs in Math.
* Fixed #define_method with a Proc to compile a stub with the same arity as the block.
* Cleaned up public headers.
* Simplified the Core Data Xcode template.
* Better ivar slot system for RubyObject + misc fixes/cleanup.
* Introduced the VM_VERIFY_IR environment variable to force a LLVM module verification. Made sure the RubySpec suite runs with no verification error.
* Webrick bug fixes.
* Follow API changes in LLVM.
* Define the encoding constants in upper case, also.
* Some of the VM primitives are not precompiled into bitcode and later inlined. 
* Reduced usage of std::vector.
* New sample code: Suru, a to-do list app that uses Core Data for storage.
* Fixed a bug when rbconfig.rb would not honor ARCH_FLAG.
* Don't recognize ^v as a CF type + misc cleanup.
* A more efficient class flags mechanism.
* Reduced the number of default slots in RubyObjects to 4.
* rake now accepts optional CC and CXX variable to setup custom compilers. To compile with clang, use rake CC=clang CXX=clang++.
* Fixed a bug in IO#read when the given buffer wouldn't be truncated.
* Don't temporarily disable the collector when booting the runtime.
* Do not raise ArgumentError in the case where the method has been undefined.
* Implemented String#each_codepoint and String#codepoints.
* macrubyc: when linking a final executable, also link against Foundation and libauto since some of their symbols can now be inlined.
* Set the actual backtrace to Obj-C exceptions, instead of an empty array.
* Per-vm method cache + misc fixes/improvements.
* Fixed the return value of NSArray#reject.
* Ruby strings now respond to #to_data which returns an NSData object wrapping the internal storage.
* Implemented File#realpath and File#readdirpath.
* Implemented IO#sysread (unbuffered reading).
* Ruby version is now set to 1.9.2.
* Do not run node if node is not executable.
* Do not allow creation of pointer to "v".
* Removed usage of autozone weak references.
* macrubyc: always link using the current macruby's libdir.
* Allow reserved keywords to be used as function keyword arguments.
* Removed usage of RTTI.
* macrubyc: now strip symbols from binaries.
* Strip symbols from shared and static library during install.
* Fixed minor encoding bugs in net/protocol and resolv.
* Fixed a bug in IO#sysread to make sure the buffer is properly resized.
* Don't instantiate the JIT when running in AOT mode.
* Honor the target triple from the deserialized kernel module
* Expose the VM_KERNEL_PATH variable to specify a kernel bitcode file.
* When the default -description is called, avoid calling #to_s on the object if the implementation is the same.
* Fixes using ruby Array methods on SBElementArray objects.
* Create all functions with internal linkage since the super dispatcher no longer requires external symbols.
* AOT: when preparing methods, also pre-compile objc stubs (currently, only generic ones).
* Added Object#to_plist and Kernel#load_plist for property list manipulation.
* Fixed bugs in open3 lib and Process.spawn.
* Time now inherits from NSDate.
* Before acquiring the core lock when resolving a method, make sure the VM object has been created/registered, since it might be needed when adding the method and if called by a foreign thread it might cause a deadlock.
* Fixed the compilation of while loops with empty bodies (ex: '() while 1').
* C extension Ruby files are now pre-compiled during build.
* +[MacRuby sharedRuntime]: don't forget to init the JIT!
* When creating a regex matcher, don't crash if there is no capture.
* macrubyc: added --sdk option (work in progress).
* Fixed build on 10.5. But it's no longer supported, so don't use it.
* Reduce/restore safe level when formatting an exception (since it may taint objects).
* Fixed bignum promotion when multiplying fixnums.
* Don't crash when trying to deal with constants whose symbols cannot be located or constants tagged as magic cookies.
* Added support for splat when clauses inside empty-case statements (don't ask me why).
* Make sure Bignum#modulo uses the implementation function.
* Fixed a minor bug in ENV#rassoc.
* Added support for comparison of recursive structs.
* Fixed a bug in IO#gets.
* When preparing a block, make sure to write barrier the reference to self.
* Always return 'main' as the top level object description.
* String#gsub with block: don't check for receiver mutable state.
* Removed Array#nitems and fixed Array#count for empty arrays.
* Thread#join: when timeout is provided, make sure to do multiple sleeps and return appropriately if the given thread has finished.
* Fixed #marshal_load for non-array arguments.
* Fixed bugs in the NSString forwarding methods.
* Implement Socket#sendfile.
* Fixed many crash bugs discovered by fuzzing.
* Added a Sandbox class that adds sandbox(7) functionality.
* Implement #remove_instance_variable for RubyObjects.
* Fixed #remove_instance_variable for native objects.
* Fixed several bugs in the BridgeSupport parser to make it read the files created by the new generator.
* Lots of openssl bug fixes.
* New sample code: Sketch, a MacRuby port of the existing Objective-C application.
* Added basic support to define/message ignored selectors (retain & friends).
* Fixed the compilation of store instructions to not be compiled as volatile, allowing further optimizations.
* Fixed a crash when yielding a block inside a loop in a thread.
* Fixed a bug in Method#== where it wouldn't work on pure objc methods.
* Honor the original string encoding when generating substrings out of a regexp matcher.
* When unregistering a thread, mark is as dead very early to avoid pthread mutex lock problems when potentially canceling it later.
* Raise an exception in case we try to stop the only running thread.
* Fixed many zlib bugs/crashes.
* #instance_eval: don't attempt to create singleton classes on symbols.
* Fixed a compiler bug where it would assume that the argument of the undef keyword would always be a literal symbol.
* Honor bridgesupport metadata when calculating the default objc signature of a new method.
* Better C implemention of iconv.
* Make sure rake won't overload -copy.
* When trying to convert a string into a numeric type, raise an exception in case the string encoding isn't ASCII incompatible.
* Mutex#try_unlock: Add the mutex to the current thread mutexes on success.
* Fixed a 1.9 bug in File.basename.
* Fixed marshal load of large integers.
* Fixed a bug when string-formatting numeric types.
* Don't attempt to #load directories.
* When killing the main thread, just exit the program.
* Fixed a bug in File.extname.
* Rewrote the regexp layer in pure C to avoid binary incompatibility issues with ICU.
* +[MacRuby sharedRuntime]: initialize the load path.
* pack(U) should set an encoding of UTF-8.
* String#strip: don't strip non-ASCII whitespaces.
* Fixed #flatten not setting untrust state.
* Properly reap child processes before closing their IO objects.
* Hash#to_a: transfer untrusted status to the new array.
* Honor ThreadGroup frozen state.
* Don't allow a Thread object to be initialized twice.
* Avoid mutual recursion while setting outers.
* Merge webrick security fix from 10.6 SU.
* Fixed a bug in the BridgeSupport parser when dealing with circular dependencies + minor bug fixes.
* Fixed multiple AOT feature #requires.
* Fixed a memory leak in the BridgeSupport parser.
* Fixed String#sum to accept bits argument greater than 64.
* macrubyc: now accept more linker options: --compatibility_version, --current_version and --install_name.
* #sprintf: don't try to mutate symbols.
* Optimized IO read_all.
* Fixed alignment bugs in the GCD layer.
* Dir.tmpdir: returns NSTemporaryDirectory() in last resort and not /tmp.
* Re-cache Obj-C variadic calls when argc is different than cached.
* macgem now asks confirmation before overriding binaries w/ different shebang.
* When a GCD block exits because of an uncaught exception, write a message on stderr.
* When a thread exits prematurely because of an exception, write a message on stderr once the thread object is being finalized only if #join was never called.
* Range#each: make sure break works in all cases.
* Fixed reentrance bugs in #load & friends.
* Synced bigdecimal extension with upstream code + fix some crashers (heap/stack corruption).
* Don't crash when using defined?(super) out of a method block.
* BridgeSupport parser: in 32-bit mode, ignore elements having only type64 attributes.
* Let's complain when trying to resize a string with a negative capacity like MRI does.
* Don't raise an exception when comparing an NSDictionary with a non-one.
* No longer install digest.h.
* Issue write barriers when storing objects into Binding slots (this should fix most of the macirb crashers).
* Fixed a bug in the super dispatcher: in case we can't locate the receiver's class in the ancestors chain, because it may have been extended, let's assume the super method will be in the direct superclass instead.
* #require: forget about the current binding during parsing.
* Rewrote AOT .rbo files loading mechanism: now using a callback routine instead of calling directly the main scope from the dylib constructor, since the dyld trampoline will not properly forward C++ exceptions.
* Added 2 new sample code scripts: javascript.rb and webrick.rb.
* Fixed a bug when changing a method's visibility to public would not be taken into account.
* Don't invalidate respond_to and dispatch caches while we are still booting the runtime.
* When calculating a backtrace path from a -e script, omit the current directory.
* File.unlink: rewrote so that the arguments aren't wrapped inside an array anymore, to avoid a resurrection error in lib/tempfile.rb.
* Fixed a silly bug in String#setbyte.
* macrubyc: disable frame pointer elimination optimization because it will mess up with the backtracing routine which walks through the stack.
* Added basic support for __method__ and __callee__.

Fixed tickets:

677	Macruby segfaults when performing symbol#to_json
702	AudioTimeStamp.new crashes MacRuby 0.6
773	Segfault occurs when specified $SAFE=4 and exception is generated.
739	String#match calls block twice
879	open-uri/stringio throw enoding errors
710	MacRuby 0.6 performance decline from 0.5 in AO Bench
841	Segfault occurs when calls the Rake::Application#const_warning.
872	An Instance of Thread is not necessary to be able to reinitialize.
740	Building LZMA gem fails
511	GCD crash with indirect method access
741	All character encoding of the string become UTF-8 when use force_encoding.
719	IO.read is broken
716	Undefining a method and then calling the method with a different arity than the original fails wrong
790	Exception is not generated when calls Thread.stop with only one thread.
902	Bus error with OpenSSL::Random.pseudo_bytes.
728	pre-definition of true conflicts with the mysql gem
708	nkf must be bundled and functional
785	Thread.join(limit) is brocken.
691	Runtime should allow pointer types for C-string arguments
864	String#sum(bits), throws an exception when specified bits >= 64.
694	framework 'Cocoa' in macirb crashes 0.6, 0.7
669	Unable to find QTKit constant within a MacRuby app
826	Symbol#instance_eval raises a TypeError
835	Abort occurs when kills the MainThread.
761	Integer 2  multiplication by self seems wrong
328	Calling a ObjC-method with a named argument which is a Ruby keyword does not work
784	Exception is generated when change Hash's key.
830	Assertion fails when calls undef with Symbol including expression interpolation.
802	Assertion or Segfault occurs when calls the Zlib::Deflate.deflate.
451	"Attempting to require ""nkf"" results in a LoadError"
369	Change wording of sample-macruby/buildall.rb
631	soap4r is not working for me
807	rack does not work due to regexp compilation error
617	Reopening Symbol Appears to Cause auto malloc[16067]: error for object 0x1016090b0: auto_zone_set_associative_ref
824	Calls to #validateUserInterfaceItem: have no effect
463	Intermitent crashes with MacRuby 0.5 HEAD (2009/11/26), Ruby threads and RestClient/Net:HTTP
808	sinatra does not load
764	Weird instance variable value of C extension.
859	rubygems load error when running script using evaluateFileAtPath:
522	URI.parse  insecure operation
584	BigMath.sqrt always returns NaN
766	macrake overrides /usr/bin/rake
586	"""macgem build"" fails."
652	"""alias"" keyword doesn't compile with symbolized-interpolated-strings"
877	rb_vm_struct_fake_set & rb_vm_resolve_const_value crash w/ NSOperation in Skreenics
695	Bitwise operations on Float results in Seg fault
685	inject doesn't work with Procs
650	Issues with passing procs/methods to #map
882	Bus error with catch / throw, Using 32bit arch.
767	Some minor issues with framework constants
825	Segfault occurs with Iconv#iconv and Iconv.iconv when calls that nil is specified for string.
699	While installing twt, failed compile in yajl
776	Segfault occurs with empty `case' clause and splat argument `when' clause.
803	remove_instance_variable bug
712	Feature Request: Add Support for C-Level Blocks
66	Death by Iconv
425	RSpec not working
775	Segfault occurs when calls Bignum#modulo
730	macrubyc is failing on trunk
618	Range#each problem with Infinity
675	Trying to do I/O on empty NSString crashes MacRuby
701	Hash: complex keys don't work correctly
725	rake should support CC and CXX flags
462	"Net::HTTP Gives ""Insecure Operation"" When Using HTTPS"
777	Segfault occurs when calls ENV#rassoc.
778	Segfault occurs when calls IO#syswrite
659	ER: Calling #== on an Obj-C object calls -isEqual:
703	Call AudioDeviceCreateIOProcID() cause assertion failed
729	rbconfig.rb does not honor ARCH_FLAG
779	Segfault occurs when use Struct which set Struct's instance to member.
857	ld: duplicate symbol _vm_ivar_get
862	[BUG] ERROR(VpDivd): space for remainder too small
707	raising an exception inside a rescue raises the rescued exception instead of the new exception
750	Net::HTTP.get fails
746	Net::HTTP assertion failed
340	"http.get failing with the error ""wrong chunk size line:  (Net::HTTPBadResponse)"""
689	Net::HTTP.post_form() is broken.
680	String.crypt crashes when called with no arguments
430	MacRuby does not reap processes started with popen
686	security escalation bug via pretty_print & Dir.entries
692	Embedded MacRuby still tries to use ruby library from /Library/Frameworks
690	calling `!= nil' on an NSString raises a TypeError exception
815	Macrake crashes at initialization
843	Can't load the same files with MultiThread at the same time.
503	connect to udp socket: getaddrinfo: nodename nor servname provided, or not known (SocketError)
844	Assertion fails when use the same variable with more iterators, and use Thread.
838	"Assertion fails when use #hex on String converted into ""utf-16le""."
744	map on an array delivered by terminal app via scripting bridge gives an immutable error
847	Assertion fails when calls Mutex#unlock, after calls Mutex#try_lock several times.
866	String#strip shouldn't strip unicode whitespaces
711	MacRuby caught SIGSEGV when call Dispatch::Job#add many times
770	IO#gets is broken when specified limit.
780	Segfault occurs when calls Proc after GC was executed.
752	description -> to_s infinite loop
852	"IO#read should return """" in outbuf when calls the IO#read(length, outbuf) with position of Discriptor == EOF."
754	TCP socket is disconnected when used IO#gets and IO#puts.
735	Array#reduce on an Array from CalCalendarStore returns nil
722	Multiple Threads are causing Segmentation Faults
732	Ruby strings should have a to_data method
627	Obj-C exception raised within a rescue block are not catched
592	No such file to load -- ubygems (LoadError)
731	uninitialized constant IO::WaitReadable / IO::WaitWritable
573	Creating a void pointer causes abort()
549	Class variables are not initialised properly.
499	Order declaring class hierarchy gets MacRuby confused about instance variables
696	net/ftp doesn't work
590	Process.spawn not implemented
760	C-level blocks are not supported
758	Time objects should work with #to_plist and #load_plist
236	Array.pack bug
853	"File.extname('.....x') should return """"."
889	Bus error with OpenSSL::ASN1.decode.
858	"""rake spec:ci"" crashes."
816	Assertion fails on multi-threaded code
869	Assertion failure when printing pathExtensions for an NSURL
809	Bus error doing cipher encryption with OpenSSL
867	Hash#to_a can't copy status of untrust.
810	MacRuby can't install the nokogiri of rubygems.
620	Yielding a block inside a loop in a thread crashes the VM
819	Getting references to Method instances leads to segfault
870	Array#flatten can't copy status of untrust.
753	An error occurs when access to Webrick's HTTPServer.
820	raising alternative Exception object in rescue block does not work.
811	Bus error encrypting/decrypting with OpenSSL
813	/Library/Frameworks/MacRuby.framework/Versions/0.6/usr/lib/ruby/1.9.0/csv.rb:1817:in `block': Unclosed quoted field on line 1. (CSV::MalformedCSVError)
850	"File.basename is broken when calls the File.basename("".."", "".*"")."
893	Bus error with OpenSSL::ASN1::Sequence.to_der
804	Constant lookup fails in instance_eval of a singleton class
814	SegFault running CGI script from command line
727	re.h header missing
663	Kernel#sprintf formatting broken on trunk
502	Marshalling large integers returns the wrong value.
846	Can't load the file when the file and the directory of the same name exist in load-path.
757	NSProgressIndicator takes 100% CPU
873	ThreadGroup doesn't honor frozen state
763	rb_singleton_class() calls can't be interpreted
890	Bus error with OpenSSL::X509::Name.new.
905	"Can't install the rubygems that create a file in ""/usr/bin/""."
891	Bus error with OpenSSL::Netscape::SPKI.to_der.
912	macirb crash on launch
894	Bus error with OpenSSL::X509::Attribute.new
892	Bus error with OpenSSL::X509::CRL.issuer.to_der
897	Bus error with OpenSSL::PKey::EC#dsa_sign_asn1.
914	September 22nd nightly build fails trying to install mongrel
898	Bus error with OpenSSL::X509::Request#to_der
885	string formatter %-8s with symbol crashes
919	URI::HTTP path_query method is private in MacRuby but not in MRI
880	Bus error with Dispatch::Source, Using 32bit arch.
900	Assertion fails with OpenSSL::X509::Certificate.issuer.to_der
899	Bus error with OpenSSL::PKCS7#to_der
723	bug when calling the same variadic method multiple times with different arity


More information about the MacRuby-devel mailing list