[MacRuby-devel] MacRuby 0.7 release notes

Rob Gleeson rob at flowof.info
Sat Oct 2 07:07:40 PDT 2010


Hey, awesome work on the Sandbox class!
I wrote a library to do something similar using FFI and MRI/REE.

I'll definitely be taking a look at that :-) 
Congrats on 0.7, too!

Rob


On 2 Oct 2010, at 05:44, Laurent Sansonetti wrote:

> 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 :-)
> 
> Highlights:
> 
> * 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."
> 612	RegexpError: U_REGEX_BAD_ESCAPE_SEQUENCE
> 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
> 
> Laurent
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel



More information about the MacRuby-devel mailing list