| Language |
Type safety |
Type expression |
Type compatibility and equivalence |
Type checking |
| A+ |
strong |
|
|
dynamic |
| ActionScript 3.0 |
strong |
implicit with optional explicit typing |
|
static |
| ABC |
strong |
|
|
|
| ABAP |
strong |
|
nominal |
static |
| Ada |
strong[TS 1] |
explicit |
nominal |
static |
| Agda |
strong |
|
nominal |
static |
| Aldor |
weak |
partially implicit[1] |
|
static |
| Alef |
strong |
|
|
static |
| ALGOL 58 |
strong |
explicit |
|
static |
| ALGOL 60 |
strong |
explicit |
|
static |
| ALGOL 68 |
strong |
explicit |
structural |
static & tagged unions |
| ALGOL W |
strong |
|
|
static |
| Alice |
strong |
implicit with optional explicit |
|
static |
| Alma-0 |
|
|
|
static |
| AmbientTalk |
strong |
|
|
dynamic |
| AMOS BASIC |
|
|
|
static |
| AngelScript |
strong |
|
|
static |
| APL |
strong |
|
|
dynamic |
| AppleScript |
weak |
|
|
dynamic |
| Arc |
|
|
|
dynamic |
| Assembly |
? |
? |
? |
? |
| AutoHotkey |
typeless |
N/A |
N/A |
N/A |
| AutoLISP |
|
|
|
dynamic |
| Ateji PX |
strong |
explicit |
nominal |
static |
| AWK |
weak |
implicit |
|
dynamic |
| B |
typeless |
|
|
|
| Ballerina |
strong |
|
structural |
static |
| Bash |
? |
? |
? |
? |
| BASIC |
strong |
explicit |
nominal |
static |
| BCPL |
typeless |
|
|
|
| BeanShell |
strong |
|
nominal |
dynamic |
| BLISS |
typeless |
N/A |
N/A |
N/A |
| Boo |
strong |
implicit with optional explicit typing |
|
static with optional dynamic typing |
| Bro |
strong |
implicit with optional explicit typing |
nominal |
static |
| C |
weak |
explicit |
nominal |
static |
| C-- |
weak |
|
|
static |
| C++ (ISO/IEC 14882) |
strong |
explicit with optional implicit typing (by using auto in C++11) |
nominal |
static[TS 2] |
| C* |
weak |
explicit |
|
static |
| C# |
strong [2] |
implicit with optional explicit typing |
nominal |
static[TS 3] |
| C shell |
? |
? |
? |
? |
| Caml |
strong |
implicit with optional explicit typing |
|
static |
| Cecil |
|
|
|
dynamic with optional static typing |
| Clean |
strong |
implicit |
|
static |
| Ceylon |
strong |
|
|
static |
| Chapel |
|
implicit with optional explicit typing |
|
static |
| CHILL |
strong |
|
|
static |
| ChucK |
strong |
|
|
|
| Cilk |
weak |
explicit |
|
static |
| Claire |
strong |
implicit with optional explicit typing |
|
dynamic with optional static typing |
| Clean |
strong |
|
|
? |
| Clojure |
strong |
implicit with optional explicit typing |
|
dynamic |
| CLU |
strong |
|
|
|
| COBOL |
strong |
explicit |
nominal |
static |
| Cobra |
strong |
explicit with optional implicit typing |
|
static with optional dynamic typing |
| CoffeeScript |
|
implicit |
|
dynamic |
| ColdFusion (CFML) |
strong |
implicit |
|
dynamic |
| COMAL |
strong |
|
|
|
| Common Lisp |
strong |
implicit with optional explicit typing |
structural for implicit typing, nominal for explicit typing |
dynamic, some static checking(depending on implementation) |
| Component Pascal |
strong |
|
|
static |
| Cool |
strong |
explicit |
|
static |
| CORAL |
strong |
|
|
static |
| Crystal |
|
implicit with optional explicit typing[3] |
structural |
static |
| Cuneiform |
|
explicit |
|
static |
| Curl |
strong |
|
nominal |
|
| Curry |
strong |
implicit with optional explicit typing |
|
static |
| Cython |
strong |
implicit with optional explicit typing |
nominal (extension types) and structural (Python) |
dynamic with optional static typing |
| D |
weak[TS 4] |
explicit |
nominal |
static |
| Dart |
strong[4] |
gradual typing |
nominal |
static with optional dynamic typing |
| Dylan |
strong |
|
|
dynamic |
| Eiffel |
strong |
|
nominal |
static |
| Elixir |
strong |
implicit |
|
dynamic |
| Erlang |
strong |
implicit |
|
dynamic |
| Euphoria |
strong |
explicit, implicit with objects |
nominal |
static, dynamic with objects |
| F# |
strong |
implicit |
nominal |
static |
| Forth |
typeless |
N/A |
N/A |
N/A |
| Fortran |
strong |
explicit[TS 5] |
nominal |
static |
| Gambas |
strong |
explicit |
nominal |
|
| GLBasic |
strong |
explicit. Non-explicit declarations available through project options |
nominal |
static |
| Gleam |
strong |
implicit with optional explicit |
nominal |
static |
| Go[5] |
strong |
partially implicit (local type inference) |
structural |
static |
| Gosu |
strong |
partially implicit (local type inference) |
nominal (subclassing) and structural |
static |
| Groovy |
strong |
implicit with optional explicit typing |
|
dynamic with optional static typing |
| Harbour |
strong |
implicit with optional explicit typing |
|
dynamic |
| Haskell |
strong |
implicit with optional explicit typing |
nominal[6][7] |
static |
| Haxe |
strong |
implicit with optional explicit typing |
nominal (subclassing) and structural |
static with optional dynamic typing |
| Io |
strong |
implicit |
|
dynamic |
| icon |
strong |
implicit |
|
dynamic |
| ISLISP |
strong |
|
|
dynamic |
| J |
strong |
|
|
dynamic |
| Java |
strong[8] |
explicit |
nominal |
static |
| JavaScript |
weak |
implicit |
N/A |
dynamic |
| Julia |
strong |
implicit with optional explicit typing[9] |
structural for implicit typing, nominal for explicit typing |
dynamic |
| Joy |
strong |
|
|
dynamic |
| Kotlin |
strong |
partially implicit (local type inference) |
nominal |
static |
| LabVIEW |
strong |
|
|
|
| Lua |
strong |
implicit |
|
dynamic |
| Maple |
strong |
|
|
dynamic |
| Mercury |
strong |
|
|
static |
| Mathematica |
strong |
|
|
dynamic |
| MATLAB M-code |
strong |
|
|
dynamic |
| Modula-2 |
weak[TS 4] |
explicit |
nominal |
static |
| Modula-3 |
weak[TS 4] |
explicit |
structural |
static |
| MUMPS (M) |
typeless |
N/A |
N/A |
N/A |
| Neko |
|
|
|
dynamic |
| Nemerle |
strong |
implicit |
nominal |
static |
| NetLogo |
strong |
implicit |
|
dynamic |
| NetRexx |
strong |
implicit with optional explicit |
|
dynamic with optional static typing |
| newLisp |
|
implicit |
|
dynamic |
| NEWP |
strong |
|
|
static |
| Newspeak |
|
|
|
dynamic |
| NewtonScript |
|
|
|
dynamic |
| Nial |
|
|
|
dynamic |
| Nim |
strong |
partially implicit (type inference) |
|
static |
| Nickle |
strong |
|
|
|
| Nu |
|
|
|
dynamic |
| Oberon |
strong |
explicit |
nominal |
static and partially dynamic[TS 6] |
| Objective-C |
weak |
explicit |
nominal |
dynamic with optional static typing[10] |
| OCaml |
strong |
implicit with optional explicit typing |
nominal for records,[11] structural for objects[7][12] |
static |
| Object Pascal |
strong |
explicit |
nominal |
static |
| Opa |
strong |
implicit with optional explicit typing |
structural |
static |
| Oxygene |
weak |
implicit |
|
static |
| Oz-Mozart |
strong |
implicit |
structural |
dynamic |
| Pascal |
weak[TS 4] |
explicit |
nominal |
static |
| Perl 5 |
|
implicit |
|
dynamic |
| PHP |
weak |
implicit with optional explicit typing |
nominal |
dynamic |
| Plus |
strong |
explicit |
structural |
static, dynamic (optional) |
| Prolog |
|
|
|
dynamic |
| Pure |
|
|
|
dynamic |
| PureScript |
strong |
implicit with optional explicit typing |
nominal |
static |
| Python |
strong |
implicit (with optional explicit typing as of 3.5) |
nominal |
dynamic |
| R |
|
implicit |
|
dynamic |
| Raku |
|
partially implicit[TS 7] |
|
dynamic with optional static typing |
| REBOL |
strong |
implicit |
|
dynamic |
| Rexx |
typeless |
N/A, implicit wrt numbers |
N/A |
static+dynamic wrt numbers |
| RPG |
weak |
|
|
static |
| Ruby |
strong |
implicit |
N/A |
dynamic |
| Rust |
strong |
explicit with optional implicit typing[13] |
mostly nominal |
static |
| S |
|
|
|
dynamic |
| S-Lang |
strong |
implicit |
|
dynamic |
| Scala |
strong |
partially implicit (local type inference) |
nominal (subclassing) and structural |
static |
| Scheme |
strong |
implicit |
|
dynamic (latent) |
| Seed7 |
strong |
explicit |
nominal |
static |
| Simula |
strong |
|
|
static[TS 8] |
| Smalltalk |
strong |
implicit |
|
dynamic |
| Swift |
strong |
partially implicit (local type inference) |
nominal (subclassing) and structural |
static |
| Standard ML |
strong |
implicit with optional explicit typing |
structural |
static |
| Tcl |
|
|
|
dynamic |
| TypeScript |
strong |
optional |
structural |
static |
| Unicon |
strong |
implicit |
|
dynamic |
| Visual Basic |
strong |
implicit with optional explicit typing |
nominal |
static |
| Visual Basic (.NET) |
weak[TS 4] |
explicit |
|
static |
| Visual Prolog |
strong |
partially implicit |
nominal |
static |
| Wolfram Language |
strong |
|
|
dynamic |
| Windows PowerShell |
strong |
implicit |
|
dynamic |
| XL |
strong |
|
nominal |
static |
| Xojo |
strong |
explicit |
nominal |
static |
| XPath/XQuery |
strong |
partially implicit |
nominal |
dynamic with optional static typing |
| Language |
Type safety |
Type expression |
Type compatibility and equivalence |
Type checking |