Porównanie języków programowania według systemu typów

Jest to porównanie cech systemów typów i sprawdzanie typów wielu języków programowania .

Krótkie definicje

  • Nominalny system typów oznacza, że ​​język decyduje, czy typy są zgodne i/lub równoważne, na podstawie jawnych deklaracji i nazw.
  • System typów strukturalnych oznacza, że ​​język decyduje, czy typy są zgodne i/lub równoważne, w oparciu o definicję i charakterystykę typów.
  • Sprawdzanie typu określa, czy i kiedy typy są weryfikowane. Sprawdzanie statyczne oznacza, że ​​błędy typu są zgłaszane na podstawie tekstu programu (kodu źródłowego). Sprawdzanie dynamiczne oznacza, że ​​błędy typu są zgłaszane na podstawie dynamicznego zachowania programu (w czasie wykonywania).
Język Wpisz bezpieczeństwo Wpisz wyrażenie Kompatybilność typów i równoważność Sprawdzanie typu
+ mocny dynamiczny
ActionScript 3.0 mocny niejawne z opcjonalnym jawnym wpisywaniem statyczny
ABC mocny
ABAP mocny nominalny statyczny
Ada mocny wyraźny nominalny statyczny
Agda mocny nominalny statyczny
Aldor słaby częściowo ukryte statyczny
Alef mocny statyczny
ALGOL 58 mocny wyraźny statyczny
ALGOL 60 mocny wyraźny statyczny
ALGOL 68 mocny wyraźny strukturalny statyczne i tagowane
ALGOL W mocny statyczny
Alicja mocny implicit z opcjonalnym explicit statyczny
Alma-0 statyczny
AmbientTalk mocny dynamiczny
AMOS PODSTAWOWY statyczny
AngelScript mocny statyczny
APL mocny dynamiczny
AppleScript słaby dynamiczny
Łuk dynamiczny
Autoskrót klawiszowy bez typu
AutoLISP dynamiczny
Ateji PX mocny wyraźny nominalny statyczny
AWK ? ? ? ?
B bez typu
Balerina mocny strukturalny statyczny
Grzmotnąć ? ? ? ?
PODSTAWOWY mocny wyraźny nominalny statyczny
BCPL bez typu
Skorupa Fasoli mocny nominalny dynamiczny
ROZKOSZ bez typu
Gwizd mocny niejawne z opcjonalnym jawnym wpisywaniem statyczny z opcjonalnym dynamicznym typowaniem
brachu mocny niejawne z opcjonalnym jawnym wpisywaniem nominalny statyczny
C słaby wyraźny nominalny statyczny
C-- słaby statyczny
C++ ( ISO/IEC 14882 ) słaby jawne z opcjonalnym wpisywaniem niejawnym (przy użyciu auto w C++ 11) nominalny statyczny
C* słaby wyraźny statyczny
C# słaby niejawne z opcjonalnym jawnym wpisywaniem nominalny statyczny
skorupa C ? ? ? ?
Caml mocny niejawne z opcjonalnym jawnym wpisywaniem statyczny
Cecil dynamiczny z opcjonalnym typowaniem statycznym
Czysty mocny domniemany statyczny
Cejlon mocny statyczny
Kaplica niejawne z opcjonalnym jawnym wpisywaniem statyczny
CHŁOD mocny statyczny
Cmokanie mocny
Cilk słaby wyraźny statyczny
Claire mocny niejawne z opcjonalnym jawnym wpisywaniem dynamiczny z opcjonalnym typowaniem statycznym
Czysty mocny ?
Clojure mocny niejawne z opcjonalnym jawnym wpisywaniem dynamiczny
CLU mocny
COBOL mocny wyraźny nominalny statyczny
Kobra mocny jawne z opcjonalnym wpisywaniem niejawnym statyczny z opcjonalnym dynamicznym typowaniem
CoffeeScript domniemany dynamiczny
ColdFusion (CFML) mocny domniemany dynamiczny
KOMAL mocny
pospolity LISP mocny niejawne z opcjonalnym jawnym wpisywaniem strukturalna dla niejawnego pisania, nominalna dla jawnego pisania dynamiczne, niektóre sprawdzanie statyczne (w zależności od implementacji)
Komponent Pascal mocny statyczny
Fajny mocny wyraźny statyczny
KORAL mocny statyczny
Kryształ niejawne z opcjonalnym jawnym wpisywaniem strukturalny statyczny
Klinowy wyraźny statyczny
Kędzior mocny nominalny
Curry mocny niejawne z opcjonalnym jawnym wpisywaniem statyczny
Cyton mocny niejawne z opcjonalnym jawnym wpisywaniem nominalne (typy rozszerzeń) i strukturalne (Python) dynamiczny z opcjonalnym typowaniem statycznym
D słaby wyraźny nominalny statyczny
Strzałka mocny stopniowe pisanie nominalny statyczny z opcjonalnym dynamicznym typowaniem
Dylana mocny dynamiczny
Eiffla mocny nominalny statyczny
Eliksir mocny domniemany dynamiczny
Erlang mocny domniemany dynamiczny
Euforia mocny jawne, niejawne z przedmiotami nominalny statyczny, dynamiczny z obiektami
F# mocny domniemany nominalny statyczny
Naprzód bez typu
Fortran mocny wyraźny nominalny statyczny
Gambas mocny wyraźny nominalny
GLBasic mocny wyraźny. Niejawne deklaracje dostępne w opcjach projektu nominalny statyczny
Iść mocny częściowo niejawne ( wnioskowanie o typie lokalnym ) strukturalny statyczny
Gosu mocny częściowo niejawne ( wnioskowanie o typie lokalnym ) nominalne (podklasy) i strukturalne statyczny
Groovy mocny niejawne z opcjonalnym jawnym wpisywaniem dynamiczny z opcjonalnym typowaniem statycznym
Port mocny niejawne z opcjonalnym jawnym wpisywaniem dynamiczny
Haskella mocny niejawne z opcjonalnym jawnym wpisywaniem nominalny statyczny
Haxe mocny niejawne z opcjonalnym jawnym wpisywaniem nominalne (podklasy) i strukturalne statyczny z opcjonalnym dynamicznym typowaniem
ja mocny domniemany dynamiczny
Ikona mocny domniemany dynamiczny
ISLISP mocny dynamiczny
J mocny dynamiczny
Jawa mocny wyraźny nominalny statyczny
JavaScript słaby domniemany dynamiczny
Julia mocny niejawne z opcjonalnym jawnym wpisywaniem strukturalna dla niejawnego pisania, nominalna dla jawnego pisania dynamiczny
Radość mocny dynamiczny
Kotlin mocny częściowo niejawne (wnioskowanie typu lokalnego) nominalny statyczny
LabVIEW mocny
Lua mocny domniemany dynamiczny
Klon mocny dynamiczny
Rtęć mocny statyczny
Matematyka mocny dynamiczny
Kod M MATLAB mocny dynamiczny
Moduł-2 słaby wyraźny nominalny statyczny
Moduł-3 słaby wyraźny strukturalny statyczny
ŚWINKA (M) bez typu
Neko dynamiczny
Nemerle mocny domniemany nominalny statyczny
NetLogo mocny domniemany dynamiczny
NetRexx mocny niejawny z opcjonalnym jawnym dynamiczny z opcjonalnym typowaniem statycznym
nowośćLisp domniemany dynamiczny
NEWP mocny statyczny
nowomowa dynamiczny
Skrypt Newtona dynamiczny
Nial dynamiczny
Nim mocny częściowo niejawne (wnioskowanie o typie) statyczny
nikiel mocny
Nu dynamiczny
Oberon mocny wyraźny nominalny statyczny i częściowo dynamiczny
Cel C mocny wyraźny nominalny dynamiczny z opcjonalnym typowaniem statycznym
OCaml mocny niejawne z opcjonalnym jawnym wpisywaniem nominalny dla rekordów, strukturalny dla obiektów statyczny
Pascal obiektowy mocny wyraźny nominalny statyczny
Opa mocny niejawne z opcjonalnym jawnym wpisywaniem strukturalny statyczny
tlen słaby domniemany statyczny
Oz-Mozart mocny domniemany strukturalny dynamiczny
Pascala słaby wyraźny nominalny statyczny
Perl 5 domniemany dynamiczny
PHP słaby niejawne z opcjonalnym jawnym wpisywaniem nominalny dynamiczny
Plus mocny wyraźny strukturalny statyczny, dynamiczny (opcjonalnie)
Prolog dynamiczny
Czysty dynamiczny
PureScript mocny niejawne z opcjonalnym jawnym wpisywaniem nominalny statyczny
Pyton mocny implicit (z opcjonalnym jawnym wpisywaniem od wersji 3.5) nominalny dynamiczny
Raku częściowo ukryte dynamiczny z opcjonalnym typowaniem statycznym
REBOL mocny domniemany dynamiczny
Rexx bez typu —, ukryte numery wrt statyczne + dynamiczne liczby wrt
RPG słaby statyczny
Rubin mocny domniemany dynamiczny
Rdza mocny jawne z opcjonalnym wpisywaniem niejawnym w większości nominalne statyczny
S dynamiczny
Gwara mocny domniemany dynamiczny
Scala mocny częściowo niejawne (wnioskowanie typu lokalnego) nominalne (podklasy) i strukturalne statyczny
Schemat mocny domniemany dynamiczny ( utajony )
Ziarno7 mocny wyraźny nominalny statyczny
symulacja mocny statyczny
Pogawędka mocny domniemany dynamiczny
Szybki mocny częściowo niejawne (wnioskowanie typu lokalnego) nominalne (podklasy) i strukturalne statyczny
standardowy ML mocny niejawne z opcjonalnym jawnym wpisywaniem strukturalny statyczny
Tcl dynamiczny
Maszynopis ? opcjonalny strukturalny statyczny
Unikon mocny domniemany dynamiczny
Visual Basic mocny niejawne z opcjonalnym jawnym wpisywaniem nominalny statyczny
Visual Basic .NET słaby wyraźny statyczny
Prolog wizualny mocny częściowo ukryte nominalny statyczny
Język Wolframa mocny dynamiczny
Windows PowerShell mocny domniemany dynamiczny
XL mocny nominalny statyczny
Xojo mocny wyraźny nominalny statyczny
XPath / XQuery mocny częściowo ukryte nominalny dynamiczny z opcjonalnym typowaniem statycznym
Język Wpisz bezpieczeństwo Wpisz wyrażenie Kompatybilność typów między kompozytami Sprawdzanie typu

Notatki