[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Optional types
On Fri, 2001-12-07 at 13:02, Dan Weinreb wrote:
> What you might do is say that the first is of class '<vector>', and
> the second is of class 'limited(<vector>, of: <integer>)'. But types
> need not correspond in a one-to-one-onto way with classes (as in the
> Curl example I mentioned recently).
This is how it works in Dylan. To be precise, <class> is a subclass of
<type>. ;-)
> Obviously there are tradeoffs here; the more your type language can
> express things beyond "the value of this variable is an object of
> class X", the more you need a whole syntax and semantics of types that
> goes beyond the syntax and semantics of classes. I guess you could
> think of such a type language as being a "little language" (in the
> sense that Olin uses the phrase), a special-purpose declarative
> language for writing certain assertions that turn out to be frequently
> useful.
Well, let's start with a basic rule of thumb:
In an optionally-typed language, adding type declarations should not
slow down your program.
I'm currently tempted to use a "class / type / contract" breakdown:
1) Every object belongs to a class. Class membership--even for
parameterized classes--can be tested in a handful of instructions.
2) Variables have types. Types include classes, foo-or-null types, and
similar beasties. In an optionally-typed language, all types should be
checkable in O(1) time.
3) More complicated constraints are handled by some sort of
design-by-contract mechanism, with the full power of the language.
I think that if you try to combine (2) and (3), you quickly wind up with
a hairy typesystem and >O(1) typechecks.
Cheers,
Eric