Ada -- generic
generic
type item is private;
-- can be assigned; other characteristics are hidden
max_items : in integer := 100; -- max by default
package queue is
procedure push( it : in item);
function pop return item;
private
subtype index is integer range 1..max_items;
items : array(index) of item;
next_free, next_full : index := 1;
end queue;
package body queue is
procedure push( it : in item) is
begin
items(next_free) := it;
next_free := next_free mod max_items + 1;
end push;
function pop return item is
rtn : item := items(nex_full);
begin
next_full := next_full mod max_items + 1;
return rtn;
end pop;
:
end queue;
-- type process is previously declared
package int_queue is new queue (integer, 50);
package message_list is new queue ( process );
ADA generic:
- Sablon szerződés modell :
- a sablon lefordítható példányosítás nélkül
- ha a sablon lefordul, akkor garantált.
hogy minden példányosítás, ami megfelel a specifikációnak,
az megfelel a sablon teljes törzsének.
- a sablon specifikációja, törzse és a példányosítások
külön fordítási egységek, és a példányosításhoz csak a
sablon specifikációja kell.
generic
type Elem is private;
type Index is ( <> );
type Vector is array ( Index range <> ) of Elem;
with function "<" ( X, Y : Elem ) return Boolean is <>;
procedure Sort ( V : in out Vector );
Functional language (clean)
isort :: [a] -> [a] | Ord a
isort [] = []
isort [a:x] = Insert a (isort x)
Insert :: a [a] -> [a] | Ord a
Insert e [] = [e]
Insert e [x:xs]
| e <= x = [e,x:xs]
| otherwise = [x:Insert e xs]
Java:
Pizza
http://pizzacompiler.sourceforge.net/
Precompiler and immediate bytecode generator.
Also pointers fo functions
Generic Java (GJ)
http://www.cis.unisa.edu.au/~pizza/gj/
http://www.research.avayalabs.com/user/wadler/gj/
http://java.sun.com/people/gbracha/generics-update.html
- Gilad Bracha and David Stoutamire (JavaSoft),
- Martin Odersky (Univ. South Australia)
- Philip Wadler (Bell Labs, Lucent)
- Support for generics,
Vector<String> as opposed to Java class Vector
- Superset of the Java programming language
- Compiles into JVM
- Compatible with existing libraries
Vector<String> is implemented by Vector
- Efficient translation no runtime info about types
interface Comparable
{
public int compareTo(Object that);
}
interface Comparable<A>
{
public int compareTo( A that);
}
class Collections2
{
public static <A implements Comparable<A> >
A max( Collection<A> xs)
{
Iterator<A> xi = xs.iterator();
A w = xi.next();
while ( xi.hasNext() )
{
A x = xi.next();
if ( w.compareTo(x) < 0 )
w = x;
}
}
}