|
Software Libraries and Component Programming
The optimization of programs that use standard libraries and components is by no means the only short-term application of supercompilation. But this area presents so many excellent opportunities that it is worthy of special comment. Here we can see quite clearly how snugly supercompilation fits into the ongoing history of computing.
Everyone knows about Moore’s Law: computer processor speed reliably doubles every 18 months. The trajectory of software efficiency, however, has been somewhat the opposite. Year after year, modern software engineering practices have pushed commercial programmers to produce code that is progressively less and less efficient.
The object-oriented methodology is elegant and improves workflow in large engineering teams, but a heavily object-oriented C++ program will typically run at 1/4 the speed of a non-object-oriented C program doing the same thing. Component programming, exemplified in JavaBeans and VisualBasic and C++ component libraries, has an even more severe effect on program efficiency. It’s quick and easy for programmers to assemble large software system from “prefab” components, but none of these components is optimized for efficiency in their application or any particular application.
The world has put up with this escalating inefficiency in software implementation, because it’s been compensated for by an ongoing dramatic increase in computer processing speed. But in the current uncertain economy, both the consumer and the business market are demonstrating a vastly decreased enthusiasm for constant, constantly hardware upgrades. More and more, software producers are realizing that in order to provide their customers with improved functionality, they will need to find ways to accelerate the performance of their software itself.
This provides a particularly wide open opportunity for supercompilation and related technologies. Even if a software project is executed by very good programmers, and the programmers incorporate beautifully-constructed software libraries or component objects into their programs, an efficient piece of software is not going to result. Vastly more efficiency will be obtained by rewriting the standard library functions or component objects to give maximum performance within the particular application. But few projects have the budget to pay their programmers to do this. (After all, if you’re going to rewrite all the standard libraries yourself, why use them at all?) This is one small but highly relevant example of the beauty of supercompilation. The supercompiler can take a look at both the standard libraries and components and the particular program they’re used within, and say to itself: “How can I rewrite these libraries and components to do the same thing they’re doing for this program, but much faster? How can I rewrite this program to make maximally effective use of the more specialized versions of these libraries and components?”
|
 |
|