Settings

Theme

Ruby takes 2min to match a regex

gist.github.com

10 points by salimane 12 years ago · 8 comments

Reader

kzrdude 12 years ago

Let's guess that Regular Expression Matching Can Be Simple And Fast is relevant http://swtch.com/~rsc/regexp/regexp1.html

srd 12 years ago

The issue with the regex seems to be the nested * matcher in the last part, paired with the grouping: ([\/\w \.-]* )* (whitespace added to re to circumvent italisizing by HN).

IIRC this was a pathological case with perl5.0 regexes as well.

Removing one of the redundant * or marking the grouping to be non-capturing with ?: seems to fix the problem.

Looks like the regex optimizer could use some love.

dhfjgkrgjg 12 years ago

if you are using Ruby for any performance sensitive task, you are doing it wrong. Really. Even the die hard fans acknowledge they use it for the meta-magic-shiny-shiny rather than something that complete a given task in a reasonable timeframe.

Ruby is slow. Dynamic languages often are.

  • kiallmacinnes 12 years ago

    > Ruby is slow. Dynamic languages often are.

    I'm not sure that explains the difference between PHP (for example) and Ruby using the same regex.

    PHP: 0.07s

    Ruby: 114.95s

    Java: 0.75s (I expect the majority of this is once off startup time rather than java being slower than PHP once it's "up".)

    Dynamic Languages are slow.. But that? That's something completely broken.

    Whether or not it's ruby, his build of ruby, a hoax, or something totally unrelated to Ruby that's causing this 1600x slowdown is up for debate though..

    • almosnow 12 years ago

      b-b-but you could express it in any way you'd like, you know like

      compute.this.regex.now()

      haha! how cool is that! it's like I'm talking with the computer LOL programming is so much fun when you don't have to use those "old languages"

  • metaphorm 12 years ago

    this is way off base. dynamically typed interpreted languages are usually slower than statically typed compiled languages, but that's not what the OP was about.

    notice that PHP and Java were tested as well and had totally reasonable times. The thing to notice here is that there is something about the Ruby regex engine that doesn't properly handle the regex used in the test.

    you shouldn't just paint broad-strokes "dynamic languages are often slow". please try to notice what is actually going on here.

  • jonahx 12 years ago

    I love ruby but this is bizarre. This example should not take that long.

    • anon9090909 12 years ago

      This is because of the greedy matching, and obviously a flaw in the ruby implementation details.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection