[TUHS] python

John Cowan cowan at ccil.org
Fri Aug 4 10:24:01 AEST 2023

On Thu, Aug 3, 2023 at 6:06 PM Dan Cross <crossd at gmail.com> wrote:

> On Thu, Aug 3, 2023 at 11:21 AM will.senn at gmail.com <will.senn at gmail.com>
> wrote:

> someone had needed to store a
> pair of integers, so they used a CONS cell;

Of course, that was a bad idea.  The pair of integers should have been a
struct or a class named after whatever its application-level purpose was: a
point, for example.

after a while, the pair
> needed to be expanded to a triple, so someone converted the single
> CONS cell into a (proper) list.

In that case, a derived struct or class should have been created.  The two
classes would use the same accessor methods, just as in C++.

this, of course, ran afoul of the type system and
> raised a condition, which resulted as an ISE in prod. The fix was
> trivial (change CDR to SECOND in the right place) but it really struck
> me that if the system were statically typed, this would have been
> trivially discovered at compile-time.

Absolutely, and if the failure was intolerable, CL's static type
declarations would have caught the use of the wrong type.  But you don't
have to declare *everything*.  For that matter, there is nothing in a fully
statically typed system that requires every variable, function, argument,
etc. to be *declared*: type inference is powerful.

Common Lisp does allow you to declare types in some limited regards;
> these are usually hints to the compiler for code generation.

They may or may not be, depending on how you set the OPTIMIZE declaration.

> like Rob, I
> greatly prefer strong, static typing.

Then why weren't you using mypy?

> Incidentally, C is weakly (you can add a pointer to an integer: the
> result is another pointer), but statically typed.

That's not weak typing, it's operator overloading, just as when you add an
int to a double.  C will not let you, e.g., add an int to a function.  Weak
typing is quite rare in high-level languages: PL/I pointer variables are
weakly typed (that is, when you allocate an object you specify the type of
the object and then assign it to the pointer variable), but the rest of the
language is strongly typed.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.tuhs.org/pipermail/tuhs/attachments/20230803/2aac7a04/attachment.htm>

More information about the TUHS mailing list