Comparison of programming languages by type system

This is a comparison of the features of the type systems and type checking of multiple programming languages.

Brief definitions
 * A nominal type system means that the language decides whether types are compatible and/or equivalent based on explicit declarations and names.
 * A structural type system means that the language decides whether types are compatible and/or equivalent based on the definition and characteristics of the types.
 * Type checking determines whether and when types are verified. Static checking means that type errors are reported based on a program's text (source code). Dynamic checking means that type errors are reported based on a program's dynamic (run-time) behavior.