On Mon, 18 Dec 2006, Hans-Christoph Steiner wrote:
On Dec 18, 2006, at 12:42 PM, Mathieu Bouchard wrote:
Non-sequitur, there are languages that have quite strict and elaborate type checking and yet which support implicit casts. For example, C++.
C/C++ is not very strict. It allows you to just change what you call a chunk of memory without complaint.
Ok, I spoke too quick. I didn't want to say strict. I shouldn't have said strict. Instead of strict I wanted to say that the type checking happens "all of the time".
I thought up some kind of classification of type systems, avoiding to call them strong/weak or static/dynamic because those words are confusing.
1. Typed expressions: each piece of code that can give a value, has a type that can be figured out at compile-time.
2. Typed variables/parameters: declarations allow runtime checks but not compile-time checks.
3. Typed values: variables don't have types, they can contain any value, but every value has a type.
4. Typed uses: values don't have types, a type is a way of using a value.
Strictness, in the sense of forbidding things to the user, is not on that scale, it's another aspect. A well-balanced strictness allows one to bypass the system whenever needed, but without being too error-prone. However it's difficult to say what it means to "bypass the system" for all four typing categories at once, or even within one category.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada