Home | Examples | Documentation | Download | Publications
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.
Partial evaluation (PE) is a program transformation technique that uses a subset of the inputs to a program to generate a specialized version of the program that will then accept the rest of the inputs. With PE it is possible to write algorithms in a highly general and abstracted form, and then automatically extract optimized versions of the algorithm specialized for certain inputs.
Partial evaluation performs aggressive optimizations by performing as much computation as possible based on the given inputs while generating code that will perform the deferred computations. Several specialized versions of a program section may be generated based upon different usages within the program. An optimized program generated by a partial evaluator may be larger in size than the original program, but will perform fewer computations at run-time.
Maple is a Computer Algebra System (CAS) and visualization environment. It uses a high-level language, which is also called Maple, to perform symbolic and numeric computations. Maple's core library contains a vast amount of mathematical knowledge and problem solving power.
MapleMIX is a partial evaluator for the Maple programming language. It is a program transformation and optimization tool for Maple programs. MapleMIX is a completely online partial evaluator written in Maple itself. It has the ability to produce highly specialized results from input programs and user provided static data. It was developed with two goals in mind. Firstly to produce optimized code by generating specialized versions of general algorithms. And secondly to exploit the vast amount of mathematical knowledge present in the Maple library by extracting precise answers to parametric problems written to produce generic solutions.
Home | Examples | Documentation | Download | Publications