Typed versus untyped languages
A language is typed if the specification of every operation defines types of data to which the operation is applicable, with the implication that it is not applicable to other types. For example, the data represented by "this text between the quotes" is a string, and in many programming languages dividing a number by a string has no meaning and will be rejected by the compilers. The invalid operation may be detected when the program is compiled ("static" type checking) and will be rejected by the compiler with a compilation error message, or it may be detected when the program is run ("dynamic" type checking), resulting in a run-time exception. Many languages allow a function called an exception handler to be written to handle this exception and, for example, always return "-1" as the result.
A special case of typed languages are the single-type languages. These are often scripting or markup languages, such as REXX or SGML, and have only one data type—most commonly character strings which are used for both symbolic and numeric data.
In contrast, an untyped language, such as most assembly languages, allows any operation to be performed on any data, which are generally considered to be sequences of bits of various lengths. High-level languages which are untyped include BCPL, Tcl, and some varieties of Forth.
In practice, while few languages are considered typed from the point of view of type theory (verifying or rejecting all operations), most modern languages offer a degree of typing. Many production languages provide means to bypass or subvert the type system, trading type-safety for finer control over the program's execution (see casting).
As far as I can understand the above quote, is the differences between unityped and untyped languages that
- for an untyped language, there is no concept of type, and any operation can apply to any value,
- for an unityped language, all the values belong to exactly one type, and an operation can apply to either all the values or none of the values?
If my understanding is correct, how can we understand the following quote which suggests to drop untyped in favor of unityped:
it would be nice if the PLT community dropped "untyped" in favor of "unityped". The definition of "untyped" meaning "just bits" actually makes sense. To use "untyped" to describe a language whose formal specification uses the word "type" and says that it has seven types (Undefined, Null, Number, String, Boolean, Symbol, and Object) is really confusing. Most people do not want to distinguish this notion of type from the PLT def.