[net.lang] Actor languages; more typing flamage

gumby@mit-eddie.UUCP (David Vinayak Wallace) (12/18/83)

    Date: Wed, 7-Dec-83 12:29:26 EST
    From: kurt@fluke.UUCP (Kurt Guntheroth)

    I was a little concerned to sport my ignorance of what an 'actor'
    language is.  Now (having heard another braver than I profess their
    ignorance) I think I know.  Actor languages are what we used to call
    object oriented languages, right?  Like Smalltalk?

Essentially.
    
    Well...  There is not all that much difference between languages like
    CLU and languages like Smalltalk.  Sure CLU tries to do most of its work
    at compile time and Smalltalk does everything at run time (so far).  But
    the way you write programs in CLU and Smalltalk is similar.  Look at
    Simula, the grandaddy of object oriented languages, and the language
    from which they all descend; Simula did all the type checking it could
    at compile time, but knew when to do run time type checking too.  Isn't
    this the best of both worlds?  Why not tell the language enough so it
    can do compile type checking when this is possible, and provide
    facilities at run time to take care of all other situations?
    
There is a huge difference between the actor model and an applicative
language.  You should read some of Hewitt's early papers on actor
languages.  The main difference is the programmer's computational model.
The actors recieve and dispatch on messages at runtime.  They aren't
constrained to be on the same processor, or even to share address space;
all they have to do is send and recieve messages.  So actor programs
more easily adapt to (for instance) dataflow architectures.

But anyway, a CLU cluster isn't a first-class object; it's a compiler
contruct.  There's no way for a language that claims to be "statically"
typed to allow any sort of extensibility or threading of code, for there
would be no way for the compiler to enforce type-checking.   Part of the
beauty of languages like LISP is the ability to dynamically extend the
language.  Why should the addition of a new numerical type force a
rewrite of the FACTORIAL function?

    And let us burn at the stake all programmers who complain about strong
    typing because it slows them down by making them type more words and
    correct more errors detected by the compiler.  Who wants to maintain
    code written by these people anyway.

So I doubt this is really the reason people don't want strong
compile-time checking; it's just that it interferes with the
programmer's model of what's going on.  In FORTRAN you don't mind the
compiler type-check because the language definition is so weak.  But
when you have varibles that can hold any of a number of arbitrary
typed-objects, do you want to do through the hair of exhaustively
defining a huge union type for this one case (assuming, of course, that
your language is smart enough to handle this case)?  The compiler should
be doing all the hard work; that's what it's there for.  Certainly,
untyped code isn't necessarily unclear; I've read thousands of lines of
code which prove that fact.

Anyway, if you're going to burn them, at least heat the buildings with
them!

david wallace, MIT AI lab.

PS: a good introduction to actor languages is Carl Hewitt's "Actors and
    Continuous Functionals."