Porovnání programovacích jazyků podle typu systému - Comparison of programming languages by type system
Toto je srovnání vlastností systémy typu a kontrola typu více programovací jazyky.
Stručné definice
- A systém nominálního typu znamená, že jazyk rozhodne, zda jsou typy kompatibilní a / nebo ekvivalentní na základě explicitních deklarací a jmen.
- A systém strukturálního typu znamená, že jazyk rozhodne, zda jsou typy kompatibilní a / nebo ekvivalentní na základě definice a charakteristik typů.
- Kontrola typu určuje, zda a kdy budou typy ověřeny. Statická kontrola znamená, že chyby typu jsou hlášeny na základě textu programu (zdrojový kód). Dynamická kontrola znamená, že chyby typu jsou hlášeny na základě dynamického (běhového) chování programu.
Jazyk | Typ bezpečnosti | Zadejte výraz | Kompatibilita typů a ekvivalence | Kontrola typu |
---|---|---|---|---|
ActionScript 3.0 | silný | implicitní s volitelným explicitním zadáním | statický | |
Ada | silný[TS 1] | explicitní | nominální | statický |
Aldor | slabý | implicitní | statický | |
ALGOL 58 | silný | explicitní | statický | |
ALGOL 60 | silný | explicitní | statický | |
ALGOL 68 | silný | explicitní | strukturální | statické & označil odbory |
APL | silný | dynamický | ||
AutoHotkey | bez písma | n / a | n / a | n / a |
Ateji PX | silný | explicitní | nominální | statický |
Bash | ? | ? | ? | ? |
ZÁKLADNÍ | silný | explicitní | nominální | statický |
BLAHO | bez písma | n / a | n / a | n / a |
BeanShell | silný | nominální | dynamický | |
Vypískat | silný | implicitní s volitelným explicitním zadáním | statické s volitelným dynamickým psaním | |
Bro | silný | implicitní s volitelným explicitním zadáním | nominální | statický |
C | slabý | explicitní | nominální | statický |
C ++ (ISO / IEC 14882 ) | slabý | explicitní s volitelným implicitním zadáním (pomocí auto v C ++ 11) | nominální | statický[TS 2] |
C# | slabý[TS 3] | implicitní s volitelným explicitním zadáním | nominální | statický[TS 4] |
Čistý | silný | implicitní | statický | |
Clojure | silný | implicitní s volitelným explicitním zadáním | dynamický | |
COBOL | silný | explicitní | nominální | statický |
Studená fúze (CFML) | silný | implicitní | dynamický | |
Společný Lisp | silný | implicitní s volitelným explicitním zadáním | strukturální pro implicitní psaní, nominální pro explicitní psaní | dynamické, některé statické kontroly (v závislosti na implementaci) |
Kučera | silný | nominální | ||
Cython | silný | implicitní s volitelným explicitním zadáním | nominální (typy rozšíření) a strukturální (Python) | dynamické s volitelným statickým psaním |
D | slabý[TS 3] | explicitní | nominální | statický |
Dylan | silný | dynamický | ||
Eiffelova | silný | nominální | statický | |
Elixír | silný | implicitní | dynamický | |
Erlang | silný | implicitní | dynamický | |
Euforie | silný | explicitní, implicitní s objekty | nominální | statické, dynamické s objekty |
F# | silný | implicitní | nominální | statický |
Forth | bez písma | n / a | n / a | n / a |
Fortran | silný | explicitní[TS 5] | nominální | statický |
Gambas | silný | explicitní | nominální | |
GLBasic | silný | explicitní. Neexplicitní deklarace dostupné prostřednictvím možností projektu | nominální | statický |
Jít[1] | silný | implicitní s volitelným explicitním zadáním | strukturální | statický |
Bože | silný | částečně implicitní (odvození lokálního typu) | nominální (podtřída) a strukturální | statický |
Báječný | silný | implicitní s volitelným explicitním zadáním | dynamické s volitelným statickým psaním | |
Přístav | silný | implicitní s volitelným explicitním zadáním | dynamický | |
Haskell | silný | implicitní s volitelným explicitním zadáním | nominální[2][3] | statický |
Haxe | silný | implicitní s volitelným explicitním zadáním | nominální (podtřída) a strukturální | statické s volitelným dynamickým psaním |
Io | silný | implicitní | dynamický | |
ISLISP | silný | dynamický | ||
J | silný | dynamický | ||
Jáva | silný[4] | explicitní | nominální | statický |
JavaScript | slabý | implicitní | n / a | dynamický |
Julie | silný | implicitní s volitelným explicitním zadáním[5] | strukturální pro implicitní psaní, nominální pro explicitní psaní | dynamický |
Radost | silný | dynamický | ||
Kotlin | silný | částečně implicitní (odvození lokálního typu) | nominální | statický |
LabVIEW | silný | |||
Lua | silný | implicitní | dynamický | |
Javor | silný | dynamický | ||
Mathematica | silný | dynamický | ||
MATLAB M-kód | silný | dynamický | ||
Modula-2 | slabý[TS 3] | explicitní | nominální | statický |
Modula-3 | slabý[TS 3] | explicitní | strukturální | statický |
PŘÍUŠNICE (M) | bez písma | n / a | n / a | n / a |
Oberon | silný | explicitní | nominální | statické a částečně dynamické[TS 6] |
Cíl-C | silný | explicitní | nominální | dynamické s volitelným statickým psaním[6] |
OCaml | silný | implicitní s volitelným explicitním zadáním | nominální pro záznamy,[7] strukturální pro objekty[3][8] | statický |
Objekt Pascal | silný | explicitní | nominální | statický |
Opa | silný | implicitní s volitelným explicitním zadáním | strukturální | statický |
Oxygen | slabý | implicitní | statický | |
Oz-Mozart | silný | implicitní | strukturální | dynamický |
Pascal | slabý[TS 3] | explicitní | nominální | statický |
Perl 5 | implicitní | dynamický | ||
PHP | implicitní s volitelným explicitním zadáním | nominální | dynamický | |
Plus | silný | explicitní | strukturální | statické, dynamické (volitelné) |
Prolog | dynamický | |||
Čistý | dynamický | |||
Krajta | silný | implicitní (s volitelným explicitním zadáváním od 3.5) | n / a | dynamický |
Raku | částečně implicitní[TS 7] | dynamické s volitelným statickým psaním | ||
REBOL | silný | implicitní | dynamický | |
Rexx | bez písma | n / a, implicitní čísla wrt | n / a | statická + dynamická čísla wrt |
RPG | slabý | statický | ||
Rubín | silný | implicitní | n / a | dynamický |
Rez | silný | explicitní s volitelným implicitním zadáním[9] | většinou nominální | statický |
S | dynamický | |||
Slang | silný | implicitní | dynamický | |
Scala | silný | částečně implicitní (odvození lokálního typu) | nominální (podtřída) a strukturální | statický |
Systém | silný | implicitní | dynamický (latentní ) | |
7. semeno | silný | explicitní | nominální | statický |
Simula | silný | statický[TS 8] | ||
Pokec | silný | implicitní | dynamický | |
Rychlý | silný | částečně implicitní (odvození lokálního typu) | nominální (podtřída) a strukturální | statický |
Standardní ML | silný | implicitní s volitelným explicitním zadáním | strukturální | statický |
Tcl | dynamický | |||
Strojopis | ? | volitelný | strukturální | statický |
Visual Basic | silný | implicitní s volitelným explicitním zadáním | nominální | statický |
Visual Basic .NET | slabý[TS 3] | explicitní | statický | |
Vizuální prolog | silný | částečně implicitní | nominální | statický |
Wolfram jazyk | silný | dynamický | ||
Windows PowerShell | silný | implicitní | dynamický | |
XL | silný | nominální | statický | |
Xojo | silný | explicitní | nominální | statický |
XPath /XQuery | silný | částečně implicitní | nominální | dynamické s volitelným statickým psaním |
Šipka | silný[10] | postupné psaní | nominální | statické s volitelným dynamickým psaním |
Jazyk | Typ bezpečnosti | Zadejte výraz | Kompatibilita typů mezi kompozity | Kontrola typu |
Reference
- ^ Nebezpečné operace jsou dobře izolovány předponou „Unchecked_“.
- ^ s volitelným odléváním dynamického typu (viz dynamické obsazení )
- ^ A b C d E F Je to téměř bezpečné, nebezpečné funkce se běžně nepoužívají.
- ^ s volitelným dynamickým typem (viz dynamické vyhledávání členů )
- ^ Volitelně může být psaní výslovně naznačeno prvním písmenem identifikátoru (známé jako implicitní psaní v komunitě Fortran).
- ^ dynamická kontrola rozšíření typu, tj. zděděných typů
- ^ explicitní pro statické typy
- ^ volitelný pro formální a virtuální postupy
- ^ Specifikace programovacího jazyka Go
- ^ Löh, Andresi. „Proč Haskell nemá záznamy se strukturálním psaním?“. Přetečení zásobníku. Archivováno od originálu dne 2016-03-14. Citováno 2020-04-13.
- ^ A b Král, Alexis (2020-01-19). „Ne, systémy dynamického typu nejsou ze své podstaty otevřenější“. lexi-lambda.github.io. Archivováno od původního dne 2020-03-01. Citováno 2020-04-13.
- ^ Sheng Liang, Gilad Bracha. Dynamické načítání tříd ve virtuálním stroji Java. Svazek 33, číslo 10 oznámení ACM SIGPLAN, říjen 1998.
- ^ https://docs.julialang.org/en/latest/manual/types/
- ^ Developer.apple.com Archivováno 10. června 2009 v Wayback Machine
- ^ „Záznam · Důvod“. reasonml.github.io. Archivováno z původního dne 2020-03-31. Citováno 2020-04-13.
- ^ "Systém strukturálního typu", Wikipedia, 2019-03-29, vyvoláno 2020-04-13
- ^ "rust-lang / rustc-dev-guide". GitHub. Citováno 2020-04-08.
- ^ „Systém typu Dart“. dart.dev. Citováno 2020-04-08.