
On 9/26/2010 8:51 AM, Mathias Gaunard wrote:
Jeremy Maitin-Shepard a écrit :
Obviously actual timing data would be useful, but it seems that in some cases these techniques might result in increased compilation time, which is at least as serious a problem as the error messages.
Indeed.
The idea, in order to provide better error messages, is to test whether all the expressions you're going to evaluate are going to lead to errors.
Then, if they don't, you evaluate said expressions. However, this basically ends up doing the same thing twice (or worse, checking the expressions are valid may be more costly than actually instanciating them) as far as the compiler is concerned.
In the case of a Proto expression, evaluating an expression by applying transforms (that are embedded in a grammar) will instantiate the same templates that would be instantiated by checking the expression against that same grammar. Given that the compiler memoizes template instantiation, checking an expression against a grammar before evaluating it *should* be virtually free in terms of compile time. Benchmarks should be done to back up that claim.
Therefore I think the solution is to provide a compiler debug mode in which we do this testing, and one where we don't.
In general, I agree. I have long thought about adding such a debug mode to the implementation of Proto itself (which eschews parameter checking for improved compile times). -- Eric Niebler BoostPro Computing http://www.boostpro.com