The term "strongly typed" has no agreed-upon definition.
It makes a "great" argument in a flamewar, because whenever someone is proven wrong, they can just redefine it to mean whatever they want it to mean. Other than that, the term serves no real purpose.
It is best to just not use the term, or, if you use it, rigorously define it first. If you see someone else use it, ask him to define the term.
Everybody has their own definition. Some that I have seen are:
- strongly typed = statically typed
- strongly typed = explicitly typed
- strongly typed = nominally typed
- strongly typed = typed
- strongly typed = has no implicit typecasts, only explicit
- strongly typed = has no typecasts at all
- strongly typed = what I understand / weakly typed = what I don't understand
- strongly typed = C++ / weakly typed = everything else
- strongly typed = Java / weakly typed = everything else
- strongly typed = .NET / weakly typed = everything else
- strongly typed = my programming language / weakly typed = your programming language
In Type Theory, there exists the notion of one type system being stronger than another. In particular, if there exists an expression e1
such that it is accepted by a type system T1
, but rejected by a type system T2
, then T2
is said to be stronger than T1
. There are two important things to note here:
- this a comparative, not an absolute: there is no strong or weak, only stronger and weaker
- there is no value implied by the term; stronger does not mean better