[Types-sig] RE: [meta-sig] The Types-SIG is comatose. Let's retire it.

Jeremy Hylton jeremy@cnri.reston.va.us
Fri, 3 Dec 1999 15:15:39 -0500 (EST)

>>>>> "PP" == Paul  <prescod@prescod.net> writes:

  PP> On Fri, 3 Dec 1999, Jeremy Hylton wrote:
  >>  If you're going to develop a static type system to describe
  >> Python programs (optional or otherwise), then I think you can't
  >> punt on all the things you want to punt on.

  PP> Forever, no? For a first draft? Yes. Type systems can be
  PP> extensible. C didn't forsee objects but C++ added them and C++
  PP> doesn't support parameterized types (at first) but added those
  PP> two.

And Java didn't support them at first, but lots of people gripe about
it and several people have proposed solutions.  If we learn a lesson
from C++ and Java here, it is that parameterized types are an
important part of the type system.

  PP> I'm always torn on these design issues between trying to get it
  PP> all right the first time and doing it incrementally. There are
  PP> big risks either way but insofar as we never get anywhere when
  PP> we try to do it all at once...that seems like the bigger risk.

I think I see where you're coming from now.  I might agree that some
of the issues (e.g. parameterized types) aren't important for the
first draft.  They will need to be added at some point before the work
is complete, so that SIG charter shouldn't specifically exclude them.

Bill Janssen made a different and good suggestion about what the
product of the SIG would be:  a specification and a mechanism to type
check the use of a module.

A potentially interesting variant of that is to type-check the use of
Java object by JPython programs.  Which is one reason why I think
interfaces, for example, need to be part of the type system.

  BJ> Note that, contrary to Jeremy's assertion, this doesn't
  BJ> explicitly mention interfaces, and doesn't necessarily involve
  BJ> them.  Of course, defining a module always implicitly defines an
  BJ> interface, so one could argue that interfaces are always a
  BJ> factor. 

We want to be able to say something like: "Method expects a file-like
object as its second argument."  Specifying "file-like object"
requires something like an interface.

[tangent?] I've looked very briefly at MzScheme, a Scheme
implementation done by the PLT group at Rice.  It supports objects and
interfaces, and units (modules) and signatures.  At first glance, it
appears to be a carefully thought-out way to add type checking to an
object-oriented, dynamically-typed language.