There's no strong reason why this parameter should be by name. I think the original motivation was to avoid evaluating anything in case of an expression like "aMatcher or bMatcher" when "aMatcher" matches ok.
However even if the parameter was not by-name, you would get several pattern compilation anyway, everytime "a matches b" is called.
If you download 1.9-SNAPSHOT, you'll get an optimized version when I compile the Pattern once for each created matcher so that it can be applied several times at no cost.
I also extended the API to accept java.util.regex.Pattern object or scala.util.matching.Regex.
Did you find about this by running the Sniff code?
Eric.