On 3/20/07, gga <GGarramuno / aol.com> wrote: > On Mar 19, 4:07 pm, "Tim Pease" <tim.pe... / gmail.com> wrote: > > > > ruby -wle 'puts "Prime" unless ("1" * ARGV[0].to_i) =~ /^1$|^(11+?)\1+$/' 42 > > > > This is pretty cool. Particularly as a simple benchmark for regex > backtracking. > It highlites some of the performance issues of backtracking in ruby1.8 > and 1.9. > And it also highlites issues with Perl's backtracking. > > Speed issues: > > time ruby1.9 -wle 'puts "Prime" unless ("1" * ARGV[0].to_i) =~ /^1$|^(11+?)\1+$/' 22441 > Prime > > real 0m2.111s > user 0m2.084s > sys 0m0.024s > > > time perl -wle 'print "Prime" if (1 x shift) !~ /^1$|^(11+?)\1+$/' 22441 > Prime > > real 0m0.230s > user 0m0.208s > sys 0m0.020s > > > But... on larger numbers... > > > ruby1.9 -wle 'puts "Prime" unless ("1" * ARGV[0].to_i) =~ /^1$|^(11+?)\1+$/' 104729 > Prime > > > perl -wle 'print "Prime" if (1 x shift) !~ /^1$|^(11+?)\1+$/' 104729 > Segmentation fault > > > perl -v > This is perl, v5.8.8 built for x86_64-linux-gnu-thread-multi > Now that is very interesting. Do you know if Ruby 1.9 is running Onigurma <sp?>, the new regexp handler?