Jim Weirich wrote:
On Sep 4, 2008, at 2:33 AM, James M. Lawrence wrote:

Hi James,

Saw your announcement on ruby-talk and want to say good job on getting drake out. Now that 0.8.2 is released, I've taken some time to look at some of what you've done. It looks impressive.

BTW, I'm copying this email to the Rake Development list. I think it would be great to get this conversation on the list for everyone to participate. You can sign up at http://rubyforge.org/mailman/listinfo/rake-devel

I've pulled the changes into a branch of rake and have begun playing with it. I've not delved into the deeps of CompTree yet, but the changes to rake look pretty straight forward.

And of course, I have some questions:

(1) Are you using Ruby threads or processes for the parallelism?

(2) We should think about the sematics of the the command "rake -j2 a b" Are "a" and "b" executed in parallel or sequentially. It looks like the code base goes with sequentially, and I think this is the right choice. But it may be worth a discussion.
For me it is more intuitive to expect a and b to execute in parallel (unless one depends on the other)

(3) I see a lot of the files are marked "GENERATED -- DO NOT EDIT". Generated from what? Will I be able to regenerate them if they need changing? Would it be better to just use CompTree as a gem?

(4) As far as I can tell, when running with num_threads > 1, you invoke all the tasks and gather the task arguments. Then you pass the task dependency graph off to the CompTree code to execute the code in parallel. So all the code execution actually happens after ALL the invokes are done on the code, rather than intermingled in standard rake. Is my understanding correct. (if so, very interesting ... I'm thinking that if it wasn't for the need for the task arguments, you could skip the invoke step and pass the dependency graph immediately to your CompTree package, yes?)

(5) I see there is a synchronization lock in the invoke method. Since this part of the code is executed by a single task (the main task), I'm not sure I see the need for a lock. Am I missing something?
Why the need to do this inside 'invoke'? Isn't it enough to use this code on the top level tasks only? (invoking them along the way)

Ittay

(6) Have you tried running any of this under Ruby 1.9?

That's all for now. Again, thanks for the work you put into this. I'll probably have more questions later.


--
--
Ittay Dror <[EMAIL PROTECTED]>


_______________________________________________
Rake-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rake-devel

Reply via email to