Hi --

I'm trying to get a fix on thread behavior in 1.9 vs. 1.8.6, and the
following things seem odd to me (unless I've just slept through some
known changes, which is always possible).

Doing this:

$ ruby19 -ve 'Thread.new { puts "a" }'
ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0]

always results in no output (except the version).

The same thing in 1.8.6 always puts's "a":

$ ruby -ve 'Thread.new { puts "a" }'
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.10.1]
a

So I figure that somehow the killing of the new thread upon exit is
"winning" over the execution of the thread. I guess that's OK (?).
Anyway, this tends to support that interpretation:

$ ruby19 -e 'Thread.new { puts "a" }; sleep 0.01'
a

I then did a few more little tests. I'm leaving in all the -v stuff,
since that's how it was, but the main point is that 1.8.6 seems to
always do this:

$ ruby -ve 'Thread.new { puts "a" }; puts "b"'
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.10.1]
a
b

while 1.9 does a variety of things, presumably depending on
scheduling:

$ ruby19 -ve 'Thread.new { puts "a" }; puts "b"'
ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0]
ba

$ ruby19 -ve 'Thread.new { puts "a" }; puts "b"'
ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0]
b
$ ruby19 -ve 'Thread.new { puts "a" }; puts "b"'
ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0]
ba

$ ruby19 -ve 'Thread.new { puts "a" }; puts "b"'
ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0]
ba
$

(That last one had both letters but only one newline.)

I'm not quite sure what all of this adds up to, in terms of predicting
thread behavior at or near the end of a program. That one can't? :-)


David

-- 
Upcoming Rails training from David A. Black and Ruby Power and Light:
   ADVANCING WITH RAILS, April 14-17 2008, New York City
   CORE RAILS, June 24-27 2008, London (Skills Matter)
See http://www.rubypal.com for details, and stay
tuned for dates in Berlin!