$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Dan W. (danw_at_[hidden])
Date: 2004-01-07 23:51:46
Matthias Schabel wrote:
> Yep.  It's slow to compile.  I'd love to start a dialogue on  
> performance issues as optimizing metaprogramming compile times is about  
> as far from my domain of expertise as it gets...
I think a good starting point for reducing compile time, and more 
importantly, *code-writing time* would be to shorten those names.
 From your own example code in another post:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
template<class Y>
dimensioned_quantity<Y,dimensioned_unit<si_model,quantity_type> >
idealGasLaw
(dimensioned_quantity<Y,dimensioned_unit<si_model,pressure_ty pe> > P,
dimensioned_quantity<Y,dimensioned_unit<si_model,volume_type> > V,
dimensioned_quantity<Y,dimensioned_unit<si_model,temperature_type> > T)
{
     return (P*V/(8.314*(_joules/(_kelvin*_mole))*T));
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Couldn't,
  "dim_qty"  do for  "dimensional_quantity"?,  or
  "dim_u"       for  "dimensioned_unit"?,      or
  "qty_t"       for  "quantity_type"?
Another question in my mind is what's the reason to have 
"pressure_type", or "temperature_type"?  Are they actually doing any work?
Another question I have is about the purpose for "si_model" above. Here 
in Canada we constantly mix metric and imperial units.  If one was 
working on software that controls a rover on a distant planet, I can see 
a good reason to restrict the units to a closed system; and I wouldn't 
mind having the ability to set a compile time constant that effects such 
restriction. But if I'm working on a circuit layout CAD application, 
most lead-through components are dimensioned in mils (inches/1000), 
while most surface-mount components are dimensioned in millimeters.
But most of all, I'd hate to have to type "si_model", "si_model", 
"si_model", "si_model", "si_model",... many times a day.
Now, if my suspicions were right, that 'si_model' is not necessary, and 
'quantity_type' isn't really doing anything, then, the type that they 
parameterize, namely 'dimensional_unit', might be dispensable.
Couldn't the function be written simply as,
template< typename Y >
Y idealGasLaw( pascals<Y> p, litres<Y> v, kelvins<Y> t );
?
Kelvins should _themselves_ 'know' that they are a temperature type. 
And if I threw Celsius at it, it should know what to do, too.
Just my dim_u<no_model,money_type> two_cents = 0.02 * $;  :)