Global Information Lookup Global Information

Comparison of programming languages by type system information


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.
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
AutoHotkey typeless
AutoLISP dynamic
Ateji PX strong explicit nominal static
AWK ? ? ? ?
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# weak[TS 3] implicit with optional explicit typing nominal static[TS 4]
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[2] 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 3] explicit nominal static
Dart strong[3] 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
Go[4] 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[5][6] 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[7] explicit nominal static
JavaScript weak implicit dynamic
Julia strong implicit with optional explicit typing[8] 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 3] explicit nominal static
Modula-3 weak[TS 3] 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[9]
OCaml strong implicit with optional explicit typing nominal for records,[10] structural for objects[6][11] 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 3] 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[12] 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 3] 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 among composites Type checking


Cite error: There are <ref group=TS> tags on this page, but the references will not show without a {{reflist|group=TS}} template (see the help page).

  1. ^ Aldor User Guide (PDF). Aldor.org. 2002. pp. 40, 61. Retrieved 3 June 2021.
  2. ^ "Type Inference Crystal". Crystal Language Reference. Retrieved 3 June 2021.
  3. ^ "The Dart type system". dart.dev. Retrieved 2020-04-08.
  4. ^ The Go Programming Language Specification
  5. ^ Löh, Andres. "Why does Haskell not have records with structural typing?". Stack Overflow. Archived from the original on 2016-03-14. Retrieved 2020-04-13.
  6. ^ a b King, Alexis (2020-01-19). "No, dynamic type systems are not inherently more open". lexi-lambda.github.io. Archived from the original on 2020-03-01. Retrieved 2020-04-13.
  7. ^ Sheng Liang, Gilad Bracha. Dynamic class loading in the Java virtual machine. Volume 33, Issue 10 of ACM SIGPLAN Notices, October 1998.
  8. ^ "Types · the Julia Language". Archived from the original on 2018-07-24. Retrieved 2018-07-24.
  9. ^ Developer.apple.com Archived June 10, 2009, at the Wayback Machine
  10. ^ "Record · Reason". reasonml.github.io. Archived from the original on 2020-03-31. Retrieved 2020-04-13.
  11. ^ "Structural type system", Wikipedia, 2019-03-29, retrieved 2020-04-13
  12. ^ "rust-lang/rustc-dev-guide". GitHub. Retrieved 2020-04-08.

and 15 Related for: Comparison of programming languages by type system information

Request time (Page generated in 1.1485 seconds.)

Comparison of programming languages by type system

Last Update:

is a comparison of the features of the type systems and type checking of multiple programming languages. Brief definitions A nominal type system means...

Word Count : 363

Comparison of programming languages

Last Update:

selection of commonly used programming languages. See the individual languages' articles for further information. Most programming languages will print...

Word Count : 1473

Dependent type

Last Update:

theory, dependent types are used to encode logic's quantifiers like "for all" and "there exists". In functional programming languages like Agda, ATS, Coq...

Word Count : 2442

Comparison of functional programming languages

Last Update:

shows a comparison of functional programming languages which compares various features and designs of different functional programming languages. "LISP...

Word Count : 817

List of programming languages by type

Last Update:

This is a list of notable programming languages, grouped by type. There is no overarching classification scheme for programming languages. Thus, in many...

Word Count : 7028

Type system

Last Update:

In computer programming, a type system is a logical system comprising a set of rules that assigns a property called a type (for example, integer, floating...

Word Count : 7252

Functional programming

Last Update:

functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm...

Word Count : 7441

Comparison of mobile operating systems

Last Update:

This is a comparison of mobile operating systems. Only the latest versions are shown in the table below, even though older versions may still be marketed...

Word Count : 8939

Strong and weak typing

Last Update:

In computer programming, one of the many ways that programming languages are colloquially classified is whether the language's type system makes it strongly...

Word Count : 1333

List of programming languages

Last Update:

index to notable programming languages, in current or historical use. Dialects of BASIC, esoteric programming languages, and markup languages are not included...

Word Count : 1326

Type safety

Last Update:

computer science, type safety and type soundness are the extent to which a programming language discourages or prevents type errors. Type safety is sometimes...

Word Count : 3647

Comparison of programming paradigms

Last Update:

the main programming paradigms, as seen when measuring programming language popularity: Procedural programming – specifies the steps a program must take...

Word Count : 2594

Relational operator

Last Update:

and inequalities (e.g., 4 ≥ 3). In programming languages that include a distinct boolean data type in their type system, like Pascal, Ada, or Java, these...

Word Count : 2710

History of programming languages

Last Update:

of programming languages spans from documentation of early mechanical computers to modern tools for software development. Early programming languages...

Word Count : 3584

Dynamic programming language

Last Update:

science, a dynamic programming language is a class of high-level programming languages which at runtime execute many common programming behaviours that static...

Word Count : 1692

PDF Search Engine © AllGlobal.net