Hi, On Jul 1, 2009, at 8:23 AM, Jjgod Jiang wrote:
Hi all,
On Wed, Jul 1, 2009 at 9:26 PM, zhida cheng<vorbei@gmail.com> wrote:
But in this very simple (I think) script, Macruby is 10x slower than built-in Ruby in OSX 10.5.7 It's for reading atom positions, calculating distances, make a summary and find out nearest atoms. You can get the codes here: http://gist.github.com/138760
I'd like to confirm this report with two Shark profiling results:
http://omploader.org/vMXducQ/macruby.mshark (Running the ruby program dist.rb given by Zhida with macruby, trunk version)
http://omploader.org/vMXdudQ/ruby.mshark (Running the ruby program dist.rb given by Zhida with ruby, the version shipping with Mac OS X Leopard)
From the first result, we can see most of the time is spent on libauto.dylib, the garbage collector library, especially spinlocks in that library. I suppose that may be a direction for optimization?
I didn't look at the shark profiling results but I am pretty sure the problem here is because we need to box the fixnums in order to insert them into collections (NSArray), because NSArray expects true Objective-C objects and fixnums are immediate types. This means a call to the object allocator and a call to the GC to set the write barrier for every object insertion. We have a plan to fix this in experimental, it's in our TODO list. The idea is to make a specialized subclass of NSArray / NSDictionary only for pure Ruby use, where the elements can be immediate. We should then have much better performance results (close to 1.9 maybe). Laurent