Typing discipline: Strong
Strong typing usually means that the programming language specifies some restrictions on intermixing operations on different data types.
This is one of the most controversial terms within typing domain, as is has no commonly agreed-upon meaning and different authors use it in different contexts. Most popular definitions of this term are the following:
- strongly typed language forbids changes of variable type during its lifetime;
- strongly typed language performs checks for possible type errors before statement execution and guarantees some well-defined error or exception to be trown in case of an error (as opposed to just executing the statement resulting in undefined behaviour up to crash);
- strongly typed language forbids conversions between datatypes;
- strongly typed language allows conversions between datatypes, but requires them to be explicit;
- strongly typed language has no language-level ways to evade type system (like giving the programmer direct access to low-level represenrtation of data);
- strongly typed language must have a complex fine-grained type system with compound datatypes (as opposed to type systems with only a few scalar types).
Strong typing is the opposite of weak typing.
- A+
- ABAP
- Ada
- Agda
- Algol W
- Algol68 (dialects: Algol68 r0, Algol68 r1, Algol68 sublanguage)
- Baltie
- Basic
- C# (dialects: Cω, Polyphonic C#)
- COBOL
- D
- Dylan
- Erlang
- Euphoria
- F#
- Factor
- Fortran
- Go
- Groovy
- Haskell (dialects: Haskell 98)
- Icon
- J
- Java
- Limbo
- Lisp (dialects: Clojure, Common Lisp, Scheme)
- Mercury
- Nemerle
- Objeck
- OCaml
- Oz
- Pascal (dialects: Extended Pascal, Standard Pascal)
- Pike
- PowerShell
-
Prolog
(dialects:
ISO Prolog)
-
B-Prolog
- B-Prolog 2.0
- B-Prolog 2.1
- B-Prolog 3.0
- B-Prolog 3.1
- B-Prolog 3.2
- B-Prolog 4.0
- B-Prolog 5.0
- B-Prolog 5.0-a
- B-Prolog 5.0-b
- B-Prolog 6.0
- B-Prolog 6.0 beta
- B-Prolog 6.1
- B-Prolog 6.2
- B-Prolog 6.4
- B-Prolog 6.5
- B-Prolog 6.6
- B-Prolog 6.7
- B-Prolog 6.7 #2
- B-Prolog 6.7 #3
- B-Prolog 6.8
- B-Prolog 6.9
- B-Prolog 7.0
- B-Prolog 7.1
- B-Prolog 7.2
- B-Prolog 7.3
- B-Prolog 7.4
- B-Prolog 7.4 #3
- B-Prolog 8.0
- Beta-Prolog 1.0
- Beta-Prolog 1.2
- Beta-Prolog 1.5
- Beta-Prolog 1.6
- ECLiPSe CLP
-
GNU Prolog
- gprolog 0.9.0
- gprolog 1.0.0
- gprolog 1.0.1
- gprolog 1.0.2
- gprolog 1.0.3
- gprolog 1.0.4
- gprolog 1.0.5
- gprolog 1.0.6
- gprolog 1.1.0
- gprolog 1.1.1
- gprolog 1.1.2
- gprolog 1.1.3
- gprolog 1.1.4
- gprolog 1.1.5
- gprolog 1.1.6
- gprolog 1.1.7
- gprolog 1.2.0
- gprolog 1.2.1
- gprolog 1.2.10
- gprolog 1.2.11
- gprolog 1.2.12
- gprolog 1.2.13
- gprolog 1.2.14
- gprolog 1.2.15
- gprolog 1.2.16
- gprolog 1.2.17
- gprolog 1.2.18
- gprolog 1.2.19
- gprolog 1.2.2
- gprolog 1.2.3
- gprolog 1.2.4
- gprolog 1.2.5
- gprolog 1.2.6
- gprolog 1.2.7
- gprolog 1.2.8
- gprolog 1.2.9
- gprolog 1.3.0
- gprolog 1.3.1
- Poplog (Prolog)
- SWI-Prolog
- Visual Prolog
-
B-Prolog
- Ruby
- S-lang
- Scala
- Seed7
- SQL
- Standard ML
- Swift
- Visual Basic (.NET)