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@lists.macosforge.org > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel