What is Expressiveness in a Computer Language

Rob Warnock rpw3 at rpw3.org
Wed Jun 21 23:19:24 EDT 2006


Marshall <marshall.spight at gmail.com> wrote:
+---------------
| Anton van Straaten wrote:
| > 3.  A really natural term to refer to types which programmers reason
| > about, even if they are not statically checked, is "latent types".  It
| > captures the situation very well intuitively, and it has plenty of
| > precedent -- e.g. it's mentioned in the Scheme reports, R5RS and its
| > predecessors, going back at least a decade or so (haven't dug to check
| > when it first appeared).
| 
| Can you be more explicit about what "latent types" means?
| I'm sorry to say it's not at all natural or intuitive to me.
| Are you referring to the types in the programmers head,
| or the ones at runtime, or what?
+---------------

Here's what the Scheme Standard has to say:

    http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-4.html
    1.1  Semantics
    ...
    Scheme has latent as opposed to manifest types. Types are assoc-
    iated with values (also called objects) rather than with variables.
    (Some authors refer to languages with latent types as weakly typed
    or dynamically typed languages.) Other languages with latent types
    are APL, Snobol, and other dialects of Lisp. Languages with manifest
    types (sometimes referred to as strongly typed or statically typed
    languages) include Algol 60, Pascal, and C.

To me, the word "latent" means that when handed a value of unknown type
at runtime, I can look at it or perform TYPE-OF on it or TYPECASE or
something and thereby discover its actual type at the moment[1], whereas
"manifest" means that types[2] are lexically apparent in the code.


-Rob

[1] I added "at the moment", since I remembered that in Common Lisp
    one may change the type of a value at runtime, specifically, a
    CLOS instance may change type "out from under you" if someone
    performs a CHANGE-CLASS on it or redefines its CLASS definition.
    [Though maybe the latter is more a change of the *type* itself
    rather than a change of the *object's* type per se.]

[2] Usually of a variables or locations, but sometimes of expressions.

-----
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