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
Kategorie: