
:-) Mathias has a point. Let's also discuss this off-list. With Spirit, I've already begun the migration towards an object free environment, but that's for terminals --of which proto is known to slow down compilation when there are lots of terminals. I am not quite sure about function objects. I want to point you again tomy boostcon 2k10 talk. we showed figure where
On 25/02/11 03:21, Joel de Guzman wrote: the old nt2, using instance of function object , resulted in a linear compile time, while having template function using make_expr get us constant compile time. Here the post I made way before on the same issue: http://lists.boost.org/boost-users/2009/02/45591.php The relevant data: Naked main : 0.05s Naked main w/ proto : 1.50s => overhead of proto include = 1.45s Without Call to the actual function: Main with 1 proto term : 1.52s => overhead = 0.02s = 0.020s/term Main with 10 proto term : 1.55s => overhead = 0.05s = 0.005s/term Main with 100 proto term : 1.99s => overhead = 0.49s = 0.005s/term Main with 150 proto term : 2.55s => overhead = 1.05s = 0.007s/term Main with 200 proto term : 3.48s => overhead = 1.98s = 0.009S/term Main with 256 proto term : 4.80s => overhead = 3.30s = 0.013s/term Main with 1 proto func : 1.52s => overhead = 0.02s for one function = 0.0200s/func Main with 10 proto func : 1.53s => overhead = 0.03s for one function = 0.0030s/func Main with 100 proto func : 1.53s => overhead = 0.03s for one function = 0.00030s/func Main with 150 proto func : 1.55s => overhead = 0.05s for one function = 0.00033s/func Main with 200 proto func : 1.57s => overhead = 0.05s for one function = 0.00035s/func Main with 256 proto func : 1.61s => overhead = 0.09s for one function = 0.00043s/func With Call to the defined functions in sequence : func behaves like term without call (aka compilation time between 1.5s and 4.8s) term behaves like term without call with a linear overhead of 0.017s/call (aka compilation time between 4.5s and 9.1s) Other measures : executable size skyrocket with term even without any functions being called. 256 functions instanciated yields a 7.3kb binary vs a 1.4kb binary for make_expr func so an overhead of 23,6 bytes/functions in the case of terminal object