[MacRuby-devel] experimental branch: status update

Jordan Breeding jordan.breeding at me.com
Mon Jun 29 14:05:27 PDT 2009


The clang support seems to be pretty solid. It does use llvm-g++ to  
compile the C++ files as noted, so that helps while clang itself  
doesn't do C++.

I am attaching another patch that helps out when clang can't be found  
in /usr/bin, and also looks for gcc/g++ in /Developer (or where you  
have Dev Tools installed) if they can't be found in /usr/bin for some  
reason.

Long term something interesting might be building more in the style of  
Xcode (build each arch, use lipo to assemble them into one file) so  
that -O4 could be used to see if it gets any additional speed out of  
the MacRuby code. I don't have the time to tackle that one right now  
however.

Jordan

-------------- next part --------------
A non-text attachment was scrubbed...
Name: macruby-patch-for-rake.diff
Type: application/octet-stream
Size: 2157 bytes
Desc: not available
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20090629/5dfdc44b/attachment.obj>
-------------- next part --------------


On Jun 29, 2009, at 15:19, Laurent Sansonetti wrote:

> Last week's status on the experimental branch work!
>
> - It's now possible to build MacRuby with clang (assuming you  
> installed it) by issuing the following command:
> $ rake use_clang=true miniruby
> This will compile all C and Objective-C files with clang and C++  
> files with llvm-g++. Apparently the build's product works as  
> expected. However, since clang is a moving target and since it does  
> not support C++ yet, this option is not enabled by default even if  
> you have clang in your system.
> - Threads!
>
> A first multi-threaded design for MacRuby was implemented. The idea  
> behind this design is to map a Thread object to a native POSIX  
> thread and make sure its related block will most always run in a  
> concurrent fashion.
>
> In order to achieve this, we created a new class called Core, which  
> is a singleton object containing all the data structures that should  
> be shared across all threads. The Core object contains a lock that  
> is used every time a shared data structure is accessed. Shared data  
> structures are for example: LLVM caches, various stubs caches,  
> BridgeSupport caches, etc.
>
> Everything else was moved to a VM class, which is completely lock- 
> free. A VM object is created at demand and only once for every  
> thread that wants to access the runtime. The VM object contains data  
> structures for the very specific thread execution, like for instance  
> current blocks, bindings, exceptions, etc. The VM sometimes calls  
> the Core (when defining a method for example) which acquires the  
> Core lock, but most of the time it just runs concurrently. All  
> MacRuby threads are scheduled by the OS kernel and registered into  
> the Objective-C garbage collector (which runs on its own threads)  
> before doing anything.
>
> This implementation is not quite finished yet and will be polished  
> in the near future, but it's already very promising. It passes all  
> the RubySpec core/thread expectations and according to a few  
> benchmarks we can finally use multiple CPU cores. I was able to run  
> some micro-benchmark code (like fib(40), method dispatch loops,  
> etc.) on 8 different Threads on a Mac Pro and MacRuby was using 800%  
> of the system (all 8 cores) vs only one in the case of Ruby 1.9.
>
> Obviously since threads are concurrent it means the developer must  
> take this into account and use mutexes to secure access to a shared  
> object (local variable, instance variable, etc.), which is not  
> necessarily needed in Ruby 1.8 or 1.9 because threads don't run  
> concurrently.
>
> Also, Thread#kill is supported but is really discouraged because  
> it's not deterministic.
>
> I wrote for fun a simple web server on top of Foundation's run loop  
> that dispatches new HTTP requests to a pool of threads, to test a  
> little bit our implementation and see if it's stable. I stressed it  
> with ab(1) (Apache benchmarking tool) and it's quite good, there are  
> still 2-3 random bugs but I think I identified all of them. If  
> you're interested, the simple web server was committed in sample- 
> macruby/Scripts/web_server.rb.
>
> That's all folks! Threads was really the last piece of functionality  
> missing in experimental vs trunk. Now it's time to converge and try  
> to fix all the remaining bugs.
>
> Laurent
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3820 bytes
Desc: not available
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20090629/5dfdc44b/attachment.bin>


More information about the MacRuby-devel mailing list