Boost logo

Boost :

Subject: Re: [boost] [MPL] A Proposal
From: Bruno Dutra (brunocodutra_at_[hidden])
Date: 2016-11-12 17:26:18


On Mon, Feb 29, 2016 at 1:52 PM, Bruno Dutra <brunocodutra_at_[hidden]>
> [snip]
>
> 2016-02-29 6:37 GMT-03:00, Jens Weller <JensWeller_at_[hidden]>:
> > [snip]
> > Do you compile as fast as Brigand?
>
> My next efforts will be directed toward developing a framework for
> running benchmarks. I'll be sure to add Brigand, as well as other
> alternatives of which I am aware, for comparison purposes.

At last, after almost 9 months, I think it is time I properly address this
question. It is unfortunate that it took so long, but up until recently the
compile time performance of metaprogramming libraries simply couldn't be
assessed due to the lack of proper tooling and arguing on this matter would
have been in vain.

As some of you may know from some of his talks, Louis Dionne and I decided
to team up and develop a comprehensive yet simple set of tools that would
make it easy to benchmark metaprogramming techniques and as such provide
feedback to the development of faster metaprogramming libraries. This is
how Metabench came to be, in very few words a drop in CMake module that
provides a concise API to generate charts out of compile time benchmarks.

Using Metabench we then set up a comprehensive collection of compile time
benchmarks to assess the performance of well known metaprogramming
libraries (currently Boost.MPL, Boost.Fusion, Boost.Hana, Metal, Meta and
Brigand), whose up to date results for several versions of GCC and Clang
are published daily at Metaben.ch [1].

Now, finally, back to the question: Yes, Metal compiles just as fast as
Brigand on both Clang and GCC and even considerably faster for some
algorithms [1].

I should also mention that meanwhile I have completely overhauled Metal a
few too many times already to make sure I explored all the possibilities
modern C++ offers TMP and even though it's still subject to some minor
refactoring, I'm confident that its current API is close to what will
eventually make it to a stable release. In fact I've already written most
of the reference documentation as I don't expect it to change significantly
anymore and as such I'd like to invite all of those interested in
metaprogramming to take a look at it [2]. Any feedback will be greatly
appreciated.

[1]: http://metaben.ch/
[2]: http://brunocodutra.github.io/metal/

Regards,
Bruno


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk