|> I have been looking at some recent papers on 'types' in OO context, and

|> have been having some discussion on such, and these have led to realize

|> that some people (perhaps many...) have not clear the distinction not

|> only between 'type' and 'type constraint', but the related one between

|> 'type system' and 'type constraint system'.

|>

|> I'll try, for the record, without much hope, to illustrate it...

You made the difference perfectly clear, at least to me.

Based on your definition I conclude that Smalltalk has a type system

but not a type constraint system.

[..]

|> * in ISO Pascal 'var x : record ... end' constrains 'x' to denote

|> values of the ``anonymous'' type defined therein, and _only that

|> type_. More explicitly: 'var x; require typeof value(x) == record

|> ... end;'.

|>

|> * in Pascal 'var x: cmplx' constrains 'x' to denote values of the type

|> 'cmplx' or *any type with the same structure*. More explicitly: 'var

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

AFAIK Pascal (like C/C++, Eiffel, Ada) has nameequivalence

for (named) types, so the same structure woun't do;

Modula-2 is one that has structural equvialence.

|> x; require typeof value(x) equiv cmplx'.

What's the difference between "==" and "equiv" ?

[..]

|> Since as a

|> rule type metaoperators define not only the storage structure of a new

|> type but also its constructors and accessor functions, a large part of

|> designing a type system is deciding how far one wants to have the

|> compiler go in synthetizing those;

Well, like distinguishing type-system from type-constraint-system

you could additionally distinguish the implementation of a type

(some call it class) from its interface (type without implem. is

an abstract type).

The type-interface-system usually is the reference for the

type-constraint-system and the type-implementation-system.

* A type-implemenation(-constraint ?) says:

"class y implements interface-x"

or

"ctor y constrained-to-producing values-conforming-interface-x"

* A type-constraint says:

"var y constrained-to-containing values-conforming-interface-x"

Ulf Schuenemann

--------------------------------------------------------------------

,_. Ulf Schnemann

#, \ Fakult?t fr Informatik, Technische Universit?t Mnchen, Germany.

v=-< WWW: http://hphalle2.informatik.tu-muenchen.de/~schuenem/