[MacRuby-devel] MacRuby 0.6 release notes

Laurent Sansonetti lsansonetti at apple.com
Thu Apr 29 17:45:42 PDT 2010


Following are the release notes of the upcoming MacRuby 0.6 release. We will prepare the installer package and write a more explanatory announcement on the blog a bit later. 

This closes a very successful 4 months development period since the last release!



* MacRuby is now stable for Cocoa development.
* Debugging support in both the compiler & the VM (experimental). Introduced macrubyd as a command-line tool to pilot the debugger.
* New Hash class. Honors insertion ordering, optimized for Ruby immediate types.
* New String class. Supports the Ruby 1.9 encoding semantics and can also hold binary data. Removed the old hidden ByteString class. Symbol has also been rewritten to support multibyte characters.
* New Regexp class. Thread-safe, based on the ICU framework. Oniguruma is no longer used.
* Additional, higher-level abstractions and convenience APIs for GCD, such as the Job and Proxy classes, via the "dispatch" library.
* Support for C extensions written for MRI (experimental).
* Rewrote the Foundation built-in classes glue to conform better to the Ruby semantics and be more robust in the future. A lot of unused code was then deleted.
* About 85% of global RubySpecs pass rate.

Other Changes:

* Fixed a bug in #caller to remove itself from the backtrace.
* Make sure #at_exit blocks are called within exception handlers.
* yaml: implement YamlNode.
* Fixed a bug in File.open to handle given path argument as a path and not a string.
* Fixed a constant lookup bug inside Foo::bar modules.
* Fixed a constant lookup bug inside #instance_eval.
* Fixed a deadlock when autoloading constants.
* Fixed a GC bug when passing thread-local objects to a new thread.
* RubyGems was updated to 1.3.6.
* Better signal handling support.
* Make sure Fixnum and Float boxes honor -copyWithZone:.
* Fixed a bug in #autoload from a mixed module.
* Register not implemented methods with rb_f_notimplement().
* Properly pop exceptions from the VM stack when we unwind from a handler.
* Added support for blocks symbolication.
* Make sure to catch Exception-based exceptions when requiring a file.
* Changed generic/native/class instance variables to use GC associative references and keep the global hash for immediates.
* Introduce RubyObject, a hidden class used as the basic class of all ruby-created classes.
* Fixed an infinite loop in Object#freeze that only occurs at SAFE level 4.
* #respond_to? now returns false in case the method is not implemented.
* GC.count is no longer implemented.
* Added support for the flip-flop operator.
* macruby_deploy: make sure .rbo files are properly linked when MacRuby is embedded into an app.
* Added encoding-related exceptions.
* Fixed #flatten on NSArrays.
* Get rid of bad alloca() calls to avoid stack corruption.
* Disable frame pointer elimination optimization in the JIT.
* Simplified constant lookup primitives.
* Removed an old limitation of 32-bit MacRuby being unable to load .rbo files.
* Don't always assume that a thread has a group.
* Array#sample: raise an exception if given count is negative.
* When doing an assignment from thread X to thread Y's stack, defeat the thread-local collector by making X leave the ownership of the object.
* BasicObject#initialize: do not forward -init in case it's a ruby method.
* Added support for methods defined for the MRI ABI (using rb_define_method & friends).
* Class#clone and Module#clone: now copying methods and constants.
* Class#instance_methods and Module#instance_methods: do not include the superclass methods.
* Rewrote the String formatting code to no longer be a stub of CFString.
* Removed the testrb and erb executables.
* Inspect message should always start by a #.
* Hash#compare_by_identity, #compare_by_identity?, #default_proc=: added.
* Hash#dup: fixed to honor subclasses.
* Hash#[]=: fixed to duplicate and freeze string keys.
* Fixed some freeze/taint problems with immediates.
* Kernel.Integer: upgraded to 1.9.
* yaml: Don't break :inline structures at 80 column boundaries.
* Integrate Mersenne Twister based random number generator from 1.9 upstream.
* Kernel#respond_to_missing?: added.
* Kernel#caller: now honor the skip argument.
* Hash#clone: keep singleton classes.
* Array#join: convert separator as string.
* Array#<=>: return nil if given obj is not array.
* Array#dup/#clone: appropriately handle singleton classes.
* When calling method missing, don't assume #method: takes only one argument.
* Allow methods/blocks with 12+ arguments.
* Delegate #copyWithZone to #dup, as we don't do anything with the zone yet.
* Copy the `trusted' state when creating a copy with #dup.
* Fixed a crasher in ossl_rand.
* A lot of fixes in String/Symbol/Regexp due to the ICU branch rewrite/merge.
* Fixed a buffer overflow when computing helper selectors in the dispatcher.
* Make sure #to_enum verifies that the argument is a symbol.
* Array#rindex: don't lookup argument in an empty array.
* Array#pack: fixed tainting of resulted string.
* Avoid a crash in #define_singleton_method on immediate types.
* Fixed a typo message in mkmf.rb.
* Avoid integer truncation in BigDecimal.
* Fixed a memory crasher in Bignum reallocation.
* When dispatching a custom #respond_to? method, do not pass the second optional argument in case the arity is incompatible.
* Fix random generation of bignums on 64-bit 10.6+ machines.
* Fixed a bug in mkmf.rb (backported from upstream 1.9).
* It is now possible to pass Proc to native C/ObjC functions or methods accepting function pointers.
* Make Symbol compliant to NSCoding.
* yaml: cleaned the extension code and fixed a few misc bugs.
* Set the maxgroups constant to NGROUPS_MAX.
* IO#tell, IO#seek: should not require readability and should be usable on write-only or read-only IOs.
* Now AOT compiling rexml and xmlrpc standard libraries.
* When defining a class, only allow a class as the super class (and not modules).
* Added notify_post.rb sample.
* Fixed bugs in ZSUPER (super with no argument and no parenthesis) compilation inside blocks.
* Fixed a problem with Array#to_a.
* Fixed a bug in Module#initialize which could be re-entered upon +initialize.
* attr_accessor and attr_writer now generates writers that send KVO notifications (if #framework was called at least once).
* Fixed a synchronization bug in the backquote operator.
* Rewrote the super dispatcher to not rely on the stack trace.
* Always try helper methods if a class is not a RubyObject descendant.
* Better Objective-C ignored selector detection.
* Implemented BEGIN{}.
* Use the same message format for printed exceptions everywhere.
* When preparing a method, do an extra resolve pass in case the Objective-C cache is invalid.
* Force class initialization upon lazy lookup.
* Added support for Array arguments in IO.popen.
* Disable the lazy JIT in case the target class already has a custom Objective-C method resolver (like CALayer).
* Do not auto-initialize classes that are not NSObject-based (like NSProxy).
* Added Pointer#cast! method to retype pointers.
* Allow any pointer to be converted to void*.
* Fix bugs in the way Objective-C method types were generated.
* When we acquire the core global lock, make sure we also release it in case an exception happens.
* MacRuby will no longer insert the special primitive methods when you directly subclass NSArray, NSString and NSDictionary. It is unlikely to happen anymore with the new architecture.
* When re-typing methods, do not re-type the same method twice and make sure the new signature matches the ruby arity.
* Fixed a bug in TypeArity() where stack size annotations were not ignored.
* The VM is now multithreaded-aware by default.
* When checking if a given BridgeSupport path has already been loaded, do a case insensitive search.
* Added support for anonymous structures (like {?=qq}).
* Added several missing GC write barriers all around the code.
* Make NSString, NSArray and NSDictionary yamlable.
* Rewrote class flags to not use the version field anymore, better typing system, fixed misc bugs.
* IRB should not crash when receiving Obj-C exceptions.
* Added simple compiler support for bit fields and C-style arrays.
* Improved support of opaque structures.
* Fixed the ViewModelDemo sample syntax.

Trac Tickets:

377	macgem crashes while installing any gem
583	macgem doesn't work with the latest trunk
551	NSThread.alloc.initWithTarget segfaulting
252	Support key-value observing via the attr_accessor family of methods
641	Using CLLocationCoordinate2D structs raises TypeError
552	NSOperationQueue segfaults when more than one operation is being added
647	Create alias when a pure objc #setFoo method is overriden
557	Ruby exceptions aren't catched when calling at_exit block
564	Scoping within nested classes is broken
644	String.include? bug
604	EXC_BAD_ACCESS while opening stream
645	Segmentation Fault using File::sysseek
210	Calling load_bridge_support_file without parameters raises NoMethodError
454	String#getbyte not working?
646	Ripper is broken on trunk
299	macruby core dumps.
651	NSString#stringByDeletingPathExtension: not returning a String
565	GCD sources should return passed-in handle for handle method
571	#respond_to? should return false for unimplemented methods
649	NSNumber bridging problem
290	Hashes do NOT stay ordered
581	sudo macgem install hotcocoa fails on latest nightly
116	"""%s"" inside of format statements in macruby doesn't work with multibyte characters"
638	NSCFNUmber.to_f doesn't work correctly
637	Segmentation fault error with NSSearchPathForDirectoriesInDomains function
464	"can't load any framework ""undefined method copy for NSLoadedClasses:NSMutableString"""
431	Seg fault evaluating an escaped unicode string
458	odd debug messages during NSPredicate.prediateWithFormat:argumentArray:
655	NSInteger received as nil from QuickLook API
665	Easy to reproduce bug
548	The flip-flop operator
159	"""%d"" with large integer argument gives conversion error"
465	[0.5b2] Problem walking directory trees with unicode filenames
438	rb_define_method for MacRuby
607	macruby_main() argv transformation prevents passing arguments to the Ruby app
582	Segmentation fault using ScriptingBridge
602	File.dirname cuts string at wrong index with unicode strings
603	error handling breaks causing a WIN32API load error to escape from tmpdir
628	CTFramesetterCreateFrame doesn't like the CFRange type
534	Hash RangeError
606	Zlib::Inflate crashing
654	CALayer has a problem aliasing methods
656	NSCoder encodeFloat and decodeFloatForKey doesn't with ruby float
666	yaml is broken for specific string, array and hash objects
667	File.join not working with NSStrings
280	NSNumber#decimalValue cant convert to ruby object
589	Build error (svn 3396)
609	Constants and methods are not copied when cloning modules
533	CoreLocation not covered by BridgeSupport
608	"rb_str_format() does not handle the ""field width"" flag for strings"
567	macirb can't exit after trying to load a gem that doesn't exit
250	subclassing Array
281	Bundles pointing to local MacRuby installation instead of embedded
614	Compiling lib/net/telnet.rb on r3489 crashes on latest trunk
246	NSMutableDictionary methods cannot retrieve values for Fixnum keys
309	String, Hash, Array: singleton attr_accessor cannot be defined
205	Incorrect list of instance methods
532	The backtrace does not contain line numbers for code in blocks
345	Ordering enumerations on set and hash
473	setObjectValue does not set floats, integers in NSTextFields properly.
579	i386 compilation doesn't work
616	MacRuby does not return control to terminal
615	macruby segfaults when generating large random numbers
555	Redefinition of method gives unexpected behavior
423	#respond_to? returns true, actual method call raises NoMethodError
512	MacRuby misreports #initialize argument count in error messages
629	Bindings not working for subclass
622	Overriding setRepresentedObject on NSViewController subclass doesn't seem to work
625	macirb failing with latest trunk
658	Including a module into Hash breaks creating an NSDictionary from a hash
529	Using a Proc as a ‘callback function’
244	"String.name should return ""String"" and not ""NSMutableString"""
587	"macgem fails on 32 bits machines (""too short escaped multibyte character"")"
179	Calling Regexp#match from ObjC in a background thread hangs
308	"""too short multibyte code string"" when using Pathname"
544	NSBigMutableString#tr crashes
126	bytestrings, nsstring, and unicode/multibyte characters do not get along
192	String#length and String#size do not work correctly
569	macrake crashes with abort trap when compiling Phusion Passenger
507	valueForKey(key) no longer working with NSManagedObject subclasses.
660	ER: Pointer needs a #cast for untyped pointers
661	[NSUndoManager um.prepareWithInvocationTarget:] is broken
550	TypeError: unrecognized runtime type when using NSThread.alloc.initWithTarget
662	macruby 0.6 breaks Growl

More information about the MacRuby-devel mailing list