add a match arena to regexp to avoid generating garbage.
simple regexps run 20x faster.
the regex-dna benchmark goes 3x faster.
R=rsc
CC=golang-dev
https://golang.org/cl/156108
diff --git a/src/pkg/regexp/all_test.go b/src/pkg/regexp/all_test.go
index 5223248..fb6f3a0 100644
--- a/src/pkg/regexp/all_test.go
+++ b/src/pkg/regexp/all_test.go
@@ -60,6 +60,7 @@
}
var matches = []tester{
+ tester{`^abcdefg`, "abcdefg", vec{0, 7}},
tester{`a+`, "baaab", vec{1, 4}},
tester{"abcd..", "abcdef", vec{0, 6}},
tester{``, "", vec{0, 0}},
@@ -450,3 +451,29 @@
}
}
}
+
+func BenchmarkLiteral(b *testing.B) {
+ x := strings.Repeat("x", 50);
+ b.StopTimer();
+ re, _ := Compile(x);
+ b.StartTimer();
+ for i := 0; i < b.N; i++ {
+ if !re.MatchString(x) {
+ println("no match!");
+ break;
+ }
+ }
+}
+
+func BenchmarkNotLiteral(b *testing.B) {
+ x := strings.Repeat("x", 49);
+ b.StopTimer();
+ re, _ := Compile("^" + x);
+ b.StartTimer();
+ for i := 0; i < b.N; i++ {
+ if !re.MatchString(x) {
+ println("no match!");
+ break;
+ }
+ }
+}