Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2003-11-17 21:19:24

Joel de Guzman wrote:
> If yes, then how much? If none, why bother with ETs?

(Lengthy rationale follows...)

Even if statically-bound is no faster than dynamically-bound, there are
reasons to prefer ETs anyway. Regular expressions are not *really*
strings, and they're not *really* containers. They're little programs
written in a domain-specific language. And in C++, the best way to
represent domain-specific languages is to approximate their syntax in
native C++ using expression templates, as Spirit does. This brings a
number of advantages:

- Invalid regular expressions can be detected at compile time instead of
at runtime.

- ET's are executable C++ code, and can access other C++ code and data
directly. A good example are Spirit's semantic actions. Boost.Regex and
GRETA don't have anything quite like them -- the string-based
representation places a wall between your patterns and the rest of your

- Ever try to write a regular expression to match balanced, nested tags?
Since ET's are native code, they can refer to other ET's (and
themselves!) in a natural way, so you can build recursive parsers out of
them. Doing the same thing with string-based regular expressions would
be clumsy and fragile.

In short, expression templates make regular expressions first-class
citizens of C++.

However, I'm not so naive as to think that people will never have
occasion to use a string-based regex representation. Hence the design
of xpressive, which allows for both.

Eric Niebler
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at