Scientific computing requires domain-specific abstractions, such as arrays, matrices, and tensors. Implementing these abstractions in libraries (rather than in compilers) makes them hard to optimize, since compilers lose semantic knowledge of the abstractions. The solution may be to move high-level optimizations out of compilers and into libraries. The Blitz++ library offers an example of how this may be done: using the compile-time metalevel processing abilities of C++, Blitz++ implements many optimizations which were previously the responsibility of compilers. The library offers functionality and efficiency competitive with Fortran, but without any language extensions.