Gurus and Typing

I've been reading with interest the current scuffle between Bruce Tate and Bruce Eckel and earlier utterances about Java. Having an amateur interest in programming languages and type theory, it's amusing to watch something of a guru fall over on type issues.



* Strong typing refers to the absence of undefined behaviour due to type errors, as in all modern programming languages;

* Weak typing refers to the presence of undefined behaviour due to type errors, like casting integers to pointers in C;

* Dynamic typing refers to runtime checking of types (using tagged values), as used in Ruby, Python, Scheme, and Erlang;

* Static typing refers to compile-time checking of types, which can subsequently be erased, as featured in Haskell, OCaml, and partially Java and C# (these latter two occasionally require dynamic tests);

* Nominal typing refers to the discrimination of types by name, for example the non-equivalence of two interfaces with the same defined signatures, or the use of Haskell's newtype;

* Structural typing refers to discrimination of types by structure, and is also known as "duck typing" - there is a lot of type theory work done in this area with records, and OCaml can infer the minimal structure of objects passed into its functions;

* Manifest or explicit typing refers to the requirement that types be declared, like the annoyances in Java and C#;

* Latent or implicit typing refers to the freedom from having to state types, like the type-inference of Haskell and OCaml or the dynamics of Scheme, and most of the other dynamic languages.



What Eckel is lionising is strong, dynamic, structural, latent types, which is what Python gives him. Funnily enough, that's what Ruby gives him as well.



If they knew better, perhaps both Eckel and Tate would be asking for strong static inferred types.