In article <4B7393E4.4000603 at mail.msu.edu>,
Josh Dersch <derschjo at mail.msu.edu> writes:
If you have a strong stomach, you should read up on
C++ Template
Metaprogramming as well. "Clever" people can do arguably useful things
with it; but I find it unreadable and very difficult to debug (I'm not
that clever, I guess). [...]
It should be mentioned that you neither need to understand the
template metaprogramming coding or debugging techniques as a user of
the libraries that employ these mechanisms.
For instance, the Spirit library in Boost lets you write recursive
descent parsers in C++ by writing the BNF grammar almost directly *as*
C++ source code. See
<http://www.boost.org/doc/libs/1_41_0/libs/spirit/doc/html/index.html>
<http://www.boost.org/doc/libs/1_41_0/libs/spirit/doc/html/spirit/qi/tutorials/quick_start.html>
Yeah, they employ all kinds of template magic to make this possible,
but as a user of Spirit I really don't need to understand it.
Stepping through the guts of Spirit while I debug my parser isn't any
more or less insane than stepping through the guts of a YACC generated
parser. The Spirit parsers are faster, provide more design options
and are implemented wholly in C++ (no lex or yacc needed). There's no
free lunch however -- the compile times can be hefty and are roughly
proportional to the complexity of the language being parsed.
And as an aside, the C/C++ code I've had to deal
with has been, in my
experience, far more bug-prone and unstable than the C# code I've dealt
with :).
C# is a .22 calibre pistol. C++ is a tactical nuclear weapon.
You don't give tactical nukes to a cadet. :-)
--
"The Direct3D Graphics Pipeline" -- DirectX 9 draft available for download
<http://legalizeadulthood.wordpress.com/the-direct3d-graphics-pipeline/>
Legalize Adulthood! <http://legalizeadulthood.wordpress.com>