Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of boost. Click here for the latest Boost documentation.
PrevUpHomeNext

Appendix 4: Performance Comparison

xpressive vs. Boost.Regex with GCC (Cygwin)
xpressive vs. Boost.Regex with Visual C++

The performance of xpressive is competitive with Boost.Regex. I have run performance benchmarks comparing static xpressive, dynamic xpressive and Boost.Regex on two platforms: gcc (Cygwin) and Visual C++. The tests include short matches and long searches. For both platforms, xpressive comes off well on short matches and roughly on par with Boost.Regex on long searches.

<disclaimer> As with all benchmarks, the true test is how xpressive performs with your patterns, your input, and your platform, so if performance matters in your application, it's best to run your own tests. </disclaimer>

Below are the results of a performance comparison between:

Test Specifications

Hardware:

hyper-threaded 3GHz Xeon with 1Gb RAM

Operating System:

Windows XP Pro + Cygwin

Compiler:

GNU C++ version 3.4.4 (Cygwin special)

C++ Standard Library:

GNU libstdc++ version 3.4.4

Boost.Regex Version:

1.33+, BOOST_REGEX_USE_CPP_LOCALE, BOOST_REGEX_RECURSIVE

xpressive Version:

0.9.6a

Comparison 1: Short Matches

The following tests evaluate the time taken to match the expression to the input string. For each result, the top number has been normalized relative to the fastest time, so 1.0 is as good as it gets. The bottom number (in parentheses) is the actual time in seconds. The best time has been marked in green.

Short Matches
static xpressive dynamic xpressive Boost Text Expression
1

(8.79e‑07s)
1.08

(9.54e‑07s)
2.51

(2.2e‑06s)
100- this is a line of ftp response which contains a message string ^([0-9]+)(\-| |$)(.*)$
1.06

(1.07e‑06s)
1

(1.01e‑06s)
4.01

(4.06e‑06s)
1234-5678-1234-456 ([[:digit:]]{4}[- ]){3}[[:digit:]]{3,4}
1

(1.4e‑06s)
1.13

(1.58e‑06s)
2.89

(4.05e‑06s)
john_maddock@compuserve.com ^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$
1

(1.28e‑06s)
1.16

(1.49e‑06s)
3.07

(3.94e‑06s)
foo12@foo.edu ^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$
1

(1.22e‑06s)
1.2

(1.46e‑06s)
3.22

(3.93e‑06s)
bob.smith@foo.tv ^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$
1.04

(8.64e‑07s)
1

(8.34e‑07s)
2.5

(2.09e‑06s)
EH10 2QQ ^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$
1.11

(9.09e‑07s)
1

(8.19e‑07s)
2.47

(2.03e‑06s)
G1 1AA ^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$
1.12

(9.38e‑07s)
1

(8.34e‑07s)
2.5

(2.08e‑06s)
SW1 1ZZ ^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$
1

(7.9e‑07s)
1.06

(8.34e‑07s)
2.49

(1.96e‑06s)
4/1/2001 ^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$
1

(8.19e‑07s)
1.04

(8.49e‑07s)
2.4

(1.97e‑06s)
12/12/2001 ^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$
1.09

(8.95e‑07s)
1

(8.19e‑07s)
2.4

(1.96e‑06s)
123 ^[-+]?[[:digit:]]*\.?[[:digit:]]*$
1.11

(8.79e‑07s)
1

(7.9e‑07s)
2.57

(2.03e‑06s)
+3.14159 ^[-+]?[[:digit:]]*\.?[[:digit:]]*$
1.09

(8.94e‑07s)
1

(8.19e‑07s)
2.47

(2.03e‑06s)
-3.14159 ^[-+]?[[:digit:]]*\.?[[:digit:]]*$

Comparison 2: Long Searches

The next test measures the time to find all matches in a long English text. The text is the complete works of Mark Twain, from Project Gutenberg. The text is 19Mb long. As above, the top number is the normalized time and the bottom number is the actual time. The best time is in green.

Long Searches
static xpressive dynamic xpressive Boost Expression
1

(0.0263s)
1

(0.0263s)
1.78

(0.0469s)
Twain
1

(0.0234s)
1

(0.0234s)
1.79

(0.042s)
Huck[[:alpha:]]+
1.84

(1.26s)
2.21

(1.51s)
1

(0.687s)
[[:alpha:]]+ing
1.09

(0.192s)
2

(0.351s)
1

(0.176s)
^[^ ]*?Twain
1.41

(0.08s)
1.21

(0.0684s)
1

(0.0566s)
Tom|Sawyer|Huckleberry|Finn
1.56

(0.195s)
1.12

(0.141s)
1

(0.125s)
(Tom|Sawyer|Huckleberry|Finn).{0,30}river|river.{0,30}(Tom|Sawyer|Huckleberry|Finn)

PrevUpHomeNext