> > This particular case has nothing to do with optimization. All > > validated Ada compilers are required to evaluate "static" expressions at > > compile-time. 2**4 is static, as are essentially all operations > > involving numeric literals, named numbers, or named constants whose > > initial value is static. See section 4.9 (or so) of the manual. How does validation guarantee compliance? If the compiled code has the right answer, how do you know it was gotten at compile time rather than run-time? > ..... mere mortals who were not involved in writing the LRM are > often assume they have to do something to make the code fast when in > reality the compiler was required to do it for them. Sometimes a hand > rolled optimization is the correct choice but not nearly as often as most > developers think. IMHO, an optimization that obscures the code even slightly is appropriate ONLY when you can prove there is no other way way to satisfy a genuine timing requirement. And "as fast as possible" is _rarely_ a true requirement. For example, our recent discussion of "sum of cubes": I posted the least efficient solution of anybody, and it ran in less than a second. As examples of how to optimize, the other solutions were excellent. But in terms of accomplishing a real task, they would have been undesirable. Especially unfortunate are those "optimizations" that actually make code slower. And I've seen enough of those in software maintenance to make me believe "If it makes the code more complicated, there's a very good chance it makes it slower." Named numbers do not fall into this category--they make the code clearer without making it slower.