Article View: comp.lang.misc
Article #3310Re: Dynamic typing (part 3)
From: Brian R. Murphy
Date: Mon, 01 Apr 1991 01:05
Date: Mon, 01 Apr 1991 01:05
50 lines
3076 bytes
3076 bytes
In article <3073:Mar2820:38:5191@kramden.acf.nyu.edu> brnstnd@kramden.acf.nyu.edu (Dan Bernstein) writes:
>The problem with this argument is that neither model is more general
>than the other, or simpler, or much more expressive. Given a statically
>typed language with structs, an ``all'' type, and the set of types, you
>can set up pairs (value,type) and poof! there's dynamic typing. Given a
>dynamically typed language with assertions, you can assert that a value
>has some type and poof! there's static typing. A good preprocessor will
>smooth out the differences either way; so, all else being equal, you
>might as well choose the model that produces better code, i.e., static
>typing (at least with current technology).
Unfortunately, given a statically-typed language with higher-order
functions and an "all" type, type inference appears to be
undecideable. Thus your statically-typed language _requires_ type
declarations, whereas in a dynamically-typed language we can get by
without them.
Note, however, that I'm not certain of its undecideability. Thatte, in
@INPROCEEDINGS{Thatte88,
AUTHOR = "S. Thatte",
TITLE = "Type Inference with Partial Types",
BOOKTITLE = "Automata, Languages and Programming: 15th
International Colloquium",
MONTH = jul,
YEAR = 1988,
PAGES = "615-629",
Publisher = "Springer-Verlag Lecture Notes in Computer Science,
vol. 317"}
attempted such a system and failed to find one. The problem is that,
whereas in standard ML-like type inference you wind up with a set of
equations to solve, here you have a set of inclusion constraints.
When all type constructors are monotonic (as all ML type constructors
are except for "->"), and your only inclusion rules are:
x <= All for all x
x <= y if x == y
e1(x) <= e2(y) if x <= y and e1(y) <= e2(y)
then solving a set of such constraints is pretty simple. If you allow
nonmonotonic type constructors:
x->y <= a->b if y <= b and a <= x
------ (antimonotonic part)
then things get trickier, and it seems quite likely that sets of
inclusion constraints cannot in general be solved.
If anyone knows a reference for whether or not this problem is
decideable, please send me email (as I don't read these type flame
wars too carefully). If it is decideable, then I retract my complaint
above...
-Brian Murphy
brm@cs.stanford.edu
Technical Details
Message-ID:
<1991Apr1.010526.26781@neon.Stanford.EDU>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!sdd.hp.com!elroy.jpl.nasa.gov!decwrl!stanford.edu!neon.Stanford.EDU!brmReferences:
<1211@optima.cs.arizona.edu> <3073:Mar2820:38:5191@kramden.acf.nyu.edu>Show Full Headers
Complete Article Headers
Newsgroups: comp.lang.misc Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!sdd.hp.com!elroy.jpl.nasa.gov!decwrl!stanford.edu!neon.Stanford.EDU!brm From: brm@neon.Stanford.EDU (Brian R. Murphy) Subject: Re: Dynamic typing (part 3) Message-ID: <1991Apr1.010526.26781@neon.Stanford.EDU> Keywords: type inference static dynamic lisp ml Sender: brm@cs.stanford.edu Organization: Computer Science Department, Stanford University, Ca , USA References: <1211@optima.cs.arizona.edu> <3073:Mar2820:38:5191@kramden.acf.nyu.edu> Date: Mon, 1 Apr 1991 01:05:26 GMT Lines: 50