On Thu, Aug 3, 2023 at 6:06 PM Dan Cross <crossd(a)gmail.com> wrote:
On Thu, Aug 3, 2023 at 11:21 AM will.senn(a)gmail.com
<will.senn(a)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.