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
|
—
|
—
|
—
|
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
|
—
|
—
|
—
|
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)
|
weak
|
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
|
—
|
—
|
—
|
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
|
—
|
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
|
—
|
—
|
—
|
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
|
strong
|
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
|
—, implicit wrt numbers
|
—
|
static+dynamic wrt numbers
|
RPG
|
weak
|
|
|
static
|
Ruby
|
strong
|
implicit
|
—
|
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
|
?
|
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
|