Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] generic programming
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: John Max Skaller <skaller@o...>
Subject: Re: [Caml-list] Re: generic programming
Alessandro Baretta wrote:

> Templates are "nasty" citizens of the C++ world. I've had *so* many 
> problems tracking down bugs in code using STL templates. Basically, 
> the "write once, compile many" strategy of C++ yields situations where 
> the semantics of the algorithms coded in a template depends upon the 
> type parameter you pass to the template itself. Abominable.

Well, it isn't that bad, but this:

    "the semantics of the algorithms coded in a template depends upon 
the type parameter you pass to the template"

is entirely correct: instantiation is not functorial (it doesn't 
necessarily preserve the structure
of the algorithm represented in the template .. alternatively, you can 
be 'nastier' and just
say that a template algorithm doesn' *have* any semantics).

FYI: as a member of the C++ committee I have fought long and hard to
limit the damage by trying to insist that the type parameters of a template
can only be bound to object types, and not 'const' or 'reference'  types.
If you allow such bindings, the semantics are wildly indeterminate.
For example:

    template<class T> T f(T t) { return t; }

    f<int&>(x) // returns reference to x

is utterly unlike

    f<int>(x) // returns copy of x

and one wonders what

    template<class T> T &( T &t) { return t; }

means when instantiated like:

    f<int&>  // what type is int && ??

Before you can have parametric polymorphism,
you need a coherent type system .. :-)

-- 
John Max Skaller, mailto:skaller@ozemail.com.au
snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia.
voice:61-2-9660-0850




-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners