Programmers wish to use high levels of abstraction and generality in order to create programs that are readable, modular, reusable, portable and maintainable. On the other hand it is often necessary to write programs that are efficient. These two goals are often in conflict; abstraction usually adds overhead and reduces the chances for optimization. Meanwhile the need for efficiency pulls the programmer away from abstraction and promotes the use of platform and type specific optimizations.... read more