fbpx
Wikipedia

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.
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

Notes edit

  1. ^ Unsafe operations are well isolated by a "Unchecked_" prefix.
  2. ^ with optional dynamic type casting (see dynamic cast)
  3. ^ a b c d e f It is almost safe, unsafe features are not commonly used.
  4. ^ with optional dynamic type (see dynamic member lookup)
  5. ^ Optionally, typing can be explicitly implied by the first letter of the identifier (known as implicit typing within the Fortran community).
  6. ^ dynamic checking of type extensions i.e. inherited types
  7. ^ explicit for static types
  8. ^ optional for formal and virtual procedures

References edit

  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. 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. 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. ^ . Archived from the original on 2018-07-24. Retrieved 2018-07-24.
  9. ^ Developer.apple.com June 10, 2009, at the Wayback Machine
  10. ^ "Record · Reason". reasonml.github.io. 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.

comparison, programming, languages, type, system, this, comparison, features, type, systems, type, checking, multiple, programming, languages, brief, definitions, nominal, type, system, means, that, language, decides, whether, types, compatible, equivalent, ba. 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 amp 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 checkingNotes edit Unsafe operations are well isolated by a Unchecked prefix with optional dynamic type casting see dynamic cast a b c d e f It is almost safe unsafe features are not commonly used with optional dynamic type see dynamic member lookup Optionally typing can be explicitly implied by the first letter of the identifier known as implicit typing within the Fortran community dynamic checking of type extensions i e inherited types explicit for static types optional for formal and virtual proceduresReferences edit Aldor User Guide PDF Aldor org 2002 pp 40 61 Retrieved 3 June 2021 Type Inference Crystal Crystal Language Reference Retrieved 3 June 2021 The Dart type system dart dev Retrieved 2020 04 08 The Go Programming Language Specification Loh Andres Why does Haskell not have records with structural typing Stack Overflow Archived from the original on 2016 03 14 Retrieved 2020 04 13 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 Sheng Liang Gilad Bracha Dynamic class loading in the Java virtual machine Volume 33 Issue 10 of ACM SIGPLAN Notices October 1998 Types the Julia Language Archived from the original on 2018 07 24 Retrieved 2018 07 24 Developer apple com Archived June 10 2009 at the Wayback Machine Record Reason reasonml github io Archived from the original on 2020 03 31 Retrieved 2020 04 13 Structural type system Wikipedia 2019 03 29 retrieved 2020 04 13 rust lang rustc dev guide GitHub Retrieved 2020 04 08 Retrieved from https en wikipedia org w index php title Comparison of programming languages by type system amp oldid 1181785122, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.