What is Expressiveness in a Computer Language

Rob Warnock rpw3 at rpw3.org
Wed Jun 21 23:03:16 EDT 2006


Rob Thorpe <robert.thorpe at antenova.com> wrote:
+---------------
| > So, will y'all just switch from using "dynamically typed" to "latently
| > typed", and stop talking about any real programs in real programming
| > languages as being "untyped" or "type-free", unless you really are
| > talking about situations in which human reasoning doesn't come into play?
| 
| I agree with most of what you say except regarding "untyped".
| 
| In machine language or most assembly the type of a variable is
| something held only in the mind of the programmer writing it, and
| nowhere else.  In latently typed languages though the programmer can
| ask what they type of a particular value is.  There is a vast
| difference to writing code in the latter kind of language to writing
| code in assembly.
| 
| I would suggest that at least assembly should be referred to as
| "untyped".
+---------------

Another language which has *neither* latent ("dynamic") nor
manifest ("static") types is (was?) BLISS[1], in which, like
assembler, variables are "just" addresses[2], and values are
"just" a machine word of bits.

However, while in BLISS neither variable nor values are typed,
operators *are* "typed"; that is, each operator specifies how
it will treat its input machine word(s) and how the machine word(s)
of bits it produces should be interpreted. So "+" is (mod 2^wordsize)
[unsigned?] integer addition, and "FADR" is floating-point addition
with rounding (as opposed to "FADD", which truncates), and so on.
So this (legal but non-sensical!) BLISS:

  x := .y FMPR (.x - 13);

would, in C, have to be written roughly like this:

  ((void*)x) = (void*)((float)(*(void*)y) * (float)((int)(*(void*)x) - 13));

On the PDP-10, at least, both of them would generate this assembler code:

  move  t1, x
  subi  t1, 13
  fmpr  t1, y
  movem t1, x

So is BLISS "typed" or not?  And if so, what is that kind of typing called?


-Rob

[1] "Basic Language for the Implementation of Systems Software",
    see <http://en.wikipedia.org/wiki/BLISS>. Created at CMU,
    added-to by DEC, used by CMU, DEC, and a few others for in
    the 70's-80's.

[2] Well, approximately. A BLISS variable is, conceptually at least,
    really a "byte-pointer" -- a triple of a word address, a byte-size,
    and a byte-position-within-word -- even on target architectures
    other than the DEC PDP-10 [which had hardware byte-pointer types].
    The compiler (even on the PDP-10) optimizes away LDB/DPB accesses
    into natively-addressible load/store sizes, when possible.

-----
Rob Warnock			<rpw3 at rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607





More information about the Python-list mailing list