From: Daniel DeLorme Date: 2009-02-24T16:01:00+09:00 Subject: Re: 1.9.1 regex 6.5 times slower than 1.8.6 in at least one case Michael Brooks wrote: > However, in one case, when using a regular expressions (posted here by > someone a long time ago) which I use to determine what numbers in > 0..10000 are prime numbers, version 1.9.1 was at least 6.5 times slower > (1.8.6 = 67 secs, 1.9.1 = 457 secs). > > The regular express is: > > ((("1" * self) =~ /^1$|^(11+?)\1+$/) == nil) As the only guy who would rather use a regex rather than string slicing, that's disheartening news. One thing you might want to check is your encoding. If your default encoding is UTF8, some string operations can be significantly slower: $ cat p-regex.rb 4000.times do |i| ((("1" * i) =~ /^1$|^(11+?)\1+$/) == nil) end $ time 1.8/bin/ruby -KN -v p-regex.rb ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux] real 0m4.411s user 0m4.292s sys 0m0.032s $ time 1.8/bin/ruby -KU -v p-regex.rb ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux] real 0m4.480s user 0m4.320s sys 0m0.004s $ time 1.9/bin/ruby -KN -v p-regex.rb ruby 1.9.1p0 (2009-02-22 revision 22551) [i686-linux] real 0m8.041s user 0m7.980s sys 0m0.020s $ time 1.9/bin/ruby -KU -v p-regex.rb ruby 1.9.1p0 (2009-02-22 revision 22551) [i686-linux] real 0m21.709s user 0m20.913s sys 0m0.032s With ascii encoding, ruby1.9 is still slower than 1.8 but at least not six times slower. -- Daniel