The object-oriented paradigm has been successful in providing good expressibility, maintainability, and reuse of software systems. With the growing popularity of the object-oriented paradigm, researchers in the parallel compiling and computing world have experimented with using this paradigm for parallelism. Using and extending C++ has been popular [25] though a few systems based on Eiffel [14] and Smalltalk [10] have also been built.
Generic programming [16] is a paradigm that abstracts concrete, efficient algorithms that can be combined with different data representations to produce a wide variety of useful software. For instance, using this paradigm, a generic sorting algorithm can be instantiated to work with different aggregate data structures like linked lists or arrays. Originally developed in Ada and Scheme, such a library has been recently implemented in C++ as the STL [19, 15] and in Java [17]. STL has been adopted by the C++ ANSI standard committee [1]. Its success is inevitable as C++ programmers have discovered a new style of writing container class libraries.
As practitioners of object-oriented parallel processing, we believe that the generic programming paradigm adds a new dimension to building parallel libraries by enabling better reuse of sequential code written in the same paradigm, by allowing the writing of extensible parallel programs, and providing interesting and useful parallel abstractions. The Coir<Futures> shared memory parallel system was designed with this belief. In the following paragraphs, we will see how abstractions for asynchronous parallelism and for data parallelism are supported in Coir<Futures> along the lines of the generic programming paradigm.
This paper is organized as follows: In the next section we discuss generic programming and STL. In section 3 we describe our Coir<Futures> library briefly. In section 4 we discuss control parallel abstractions through futures [9] and in section 5 we describe data parallel objects. In section 6 we discuss data parallel extensions to sequential STL algorithms. In section 7 we discuss related work and in section 8 we draw our conclusions.