Comparação de linguagens de programação por sistema de tipo - Comparison of programming languages by type system
Esta é uma comparação dos recursos dos sistemas de tipo e verificação de tipo de várias linguagens de programação .
Definições breves
- Um sistema de tipo nominal significa que a linguagem decide se os tipos são compatíveis e / ou equivalentes com base em declarações e nomes explícitos.
- Um sistema de tipo estrutural significa que a linguagem decide se os tipos são compatíveis e / ou equivalentes com base na definição e nas características dos tipos.
- A verificação de tipo determina se e quando os tipos são verificados. A verificação estática significa que os erros de tipo são relatados com base no texto de um programa (código-fonte). A verificação dinâmica significa que os erros de tipo são relatados com base no comportamento dinâmico (tempo de execução) de um programa.
Língua | Segurança de tipo | Expressão de tipo | Compatibilidade e equivalência de tipo | Verificação de tipo |
---|---|---|---|---|
A + | Forte | dinâmico | ||
ActionScript 3.0 | Forte | implícito com digitação explícita opcional | estático | |
abc | Forte | |||
ABAP | Forte | nominal | estático | |
Ada | Forte | explícito | nominal | estático |
Agda | Forte | nominal | estático | |
Aldor | fraco | parcialmente implícito | estático | |
Alef | Forte | estático | ||
ALGOL 58 | Forte | explícito | estático | |
ALGOL 60 | Forte | explícito | estático | |
ALGOL 68 | Forte | explícito | estrutural | uniões estáticas e marcadas |
ALGOL W | Forte | estático | ||
Alice | Forte | implícito com explícito opcional | estático | |
Alma-0 | estático | |||
AmbientTalk | Forte | dinâmico | ||
AMOS BASIC | estático | |||
AngelScript | Forte | estático | ||
APL | Forte | dinâmico | ||
AppleScript | fraco | dinâmico | ||
Arco | dinâmico | |||
AutoHotkey | sem tipo | N / D | N / D | N / D |
AutoLISP | dinâmico | |||
Ateji PX | Forte | explícito | nominal | estático |
AWK | ? | ? | ? | ? |
B | sem tipo | |||
Bailarina | Forte | estrutural | estático | |
Bash | ? | ? | ? | ? |
BASIC | Forte | explícito | nominal | estático |
BCPL | sem tipo | |||
BeanShell | Forte | nominal | dinâmico | |
FELICIDADE | sem tipo | N / D | N / D | N / D |
Boo | Forte | implícito com digitação explícita opcional | estático com digitação dinâmica opcional | |
irmão | Forte | implícito com digitação explícita opcional | nominal | estático |
C | fraco | explícito | nominal | estático |
C-- | fraco | estático | ||
C ++ ( ISO / IEC 14882 ) | fraco | explícito com tipagem implícita opcional (usando auto em C ++ 11) | nominal | estático |
C * | fraco | explícito | estático | |
C # | fraco | implícito com digitação explícita opcional | nominal | estático |
Shell C | ? | ? | ? | ? |
Caml | Forte | implícito com digitação explícita opcional | estático | |
Cecil | dinâmico com tipagem estática opcional | |||
Limpar | Forte | implícito | estático | |
Ceilão | Forte | estático | ||
Capela | implícito com digitação explícita opcional | estático | ||
FRIO | Forte | estático | ||
Mandril | Forte | |||
Cilk | fraco | explícito | estático | |
Claire | Forte | implícito com digitação explícita opcional | dinâmico com tipagem estática opcional | |
Limpar | Forte | ? | ||
Clojure | Forte | implícito com digitação explícita opcional | dinâmico | |
CLU | Forte | |||
COBOL | Forte | explícito | nominal | estático |
Cobra | Forte | explícito com tipagem implícita opcional | estático com digitação dinâmica opcional | |
CoffeeScript | implícito | dinâmico | ||
ColdFusion (CFML) | Forte | implícito | dinâmico | |
COMAL | Forte | |||
Lisp Comum | Forte | implícito com digitação explícita opcional | estrutural para tipagem implícita, nominal para tipagem explícita | dinâmico, alguma verificação estática (dependendo da implementação) |
Componente Pascal | Forte | estático | ||
Frio | Forte | explícito | estático | |
CORAL | Forte | estático | ||
Cristal | implícito com digitação explícita opcional | estrutural | estático | |
Cuneiforme | explícito | estático | ||
Ondulação | Forte | nominal | ||
Curry | Forte | implícito com digitação explícita opcional | estático | |
Cython | Forte | implícito com digitação explícita opcional | nominal (tipos de extensão) e estrutural (Python) | dinâmico com tipagem estática opcional |
D | fraco | explícito | nominal | estático |
Dardo | Forte | digitação gradual | nominal | estático com digitação dinâmica opcional |
Dylan | Forte | dinâmico | ||
Eiffel | Forte | nominal | estático | |
Elixir | Forte | implícito | dinâmico | |
Erlang | Forte | implícito | dinâmico | |
Euforia | Forte | explícito, implícito com objetos | nominal | estático, dinâmico com objetos |
F # | Forte | implícito | nominal | estático |
Para frente | sem tipo | N / D | N / D | N / D |
Fortran | Forte | explícito | nominal | estático |
Gambas | Forte | explícito | nominal | |
GLBasic | Forte | explícito. Declarações não explícitas disponíveis por meio de opções de projeto | nominal | estático |
Ir | Forte | parcialmente implícito ( inferência de tipo local ) | estrutural | estático |
Gosu | Forte | parcialmente implícito ( inferência de tipo local ) | nominal (subclasse) e estrutural | estático |
Groovy | Forte | implícito com digitação explícita opcional | dinâmico com tipagem estática opcional | |
Porto | Forte | implícito com digitação explícita opcional | dinâmico | |
Haskell | Forte | implícito com digitação explícita opcional | nominal | estático |
Haxe | Forte | implícito com digitação explícita opcional | nominal (subclasse) e estrutural | estático com digitação dinâmica opcional |
Io | Forte | implícito | dinâmico | |
ISLISP | Forte | dinâmico | ||
J | Forte | dinâmico | ||
Java | Forte | explícito | nominal | estático |
JavaScript | fraco | implícito | N / D | dinâmico |
Julia | Forte | implícito com digitação explícita opcional | estrutural para tipagem implícita, nominal para tipagem explícita | dinâmico |
Alegria | Forte | dinâmico | ||
Kotlin | Forte | parcialmente implícito (inferência de tipo local) | nominal | estático |
LabVIEW | Forte | |||
Lua | Forte | implícito | dinâmico | |
Bordo | Forte | dinâmico | ||
Mercúrio | Forte | estático | ||
Mathematica | Forte | dinâmico | ||
Código M MATLAB | Forte | dinâmico | ||
Modula-2 | fraco | explícito | nominal | estático |
Modula-3 | fraco | explícito | estrutural | estático |
MUMPS (M) | sem tipo | N / D | N / D | N / D |
Neko | dinâmico | |||
Nemerle | Forte | implícito | nominal | estático |
NetLogo | Forte | implícito | dinâmico | |
NetRexx | Forte | implícito com explícito opcional | dinâmico com tipagem estática opcional | |
newLisp | implícito | dinâmico | ||
NOVO P | Forte | estático | ||
Novilíngua | dinâmico | |||
NewtonScript | dinâmico | |||
Nial | dinâmico | |||
Nim | Forte | parcialmente implícito (inferência de tipo) | estático | |
Nickle | Forte | |||
Nu | dinâmico | |||
Oberon | Forte | explícito | nominal | estático e parcialmente dinâmico |
Objective-C | Forte | explícito | nominal | dinâmico com tipagem estática opcional |
OCaml | Forte | implícito com digitação explícita opcional | nominal para registros, estrutural para objetos | estático |
Object Pascal | Forte | explícito | nominal | estático |
Opa | Forte | implícito com digitação explícita opcional | estrutural | estático |
Oxigênio | fraco | implícito | estático | |
Oz-Mozart | Forte | implícito | estrutural | dinâmico |
Pascal | fraco | explícito | nominal | estático |
Perl 5 | implícito | dinâmico | ||
PHP | fraco | implícito com digitação explícita opcional | nominal | dinâmico |
Mais | Forte | explícito | estrutural | estático, dinâmico (opcional) |
Prolog | dinâmico | |||
Puro | dinâmico | |||
Pitão | Forte | implícito (com digitação explícita opcional a partir de 3.5) | N / D | dinâmico |
Raku | parcialmente implícito | dinâmico com tipagem estática opcional | ||
REBOL | Forte | implícito | dinâmico | |
Rexx | sem tipo | N / A, números de escrita implícitos | N / D | números de escrita estática + dinâmica |
RPG | fraco | estático | ||
Rubi | Forte | implícito | N / D | dinâmico |
Ferrugem | Forte | explícito com tipagem implícita opcional | principalmente nominal | estático |
S | dinâmico | |||
Gíria | Forte | implícito | dinâmico | |
Scala | Forte | parcialmente implícito (inferência de tipo local) | nominal (subclasse) e estrutural | estático |
Esquema | Forte | implícito | dinâmico ( latente ) | |
Seed7 | Forte | explícito | nominal | estático |
Simula | Forte | estático | ||
Conversa fiada | Forte | implícito | dinâmico | |
Rápido | Forte | parcialmente implícito (inferência de tipo local) | nominal (subclasse) e estrutural | estático |
ML padrão | Forte | implícito com digitação explícita opcional | estrutural | estático |
Tcl | dinâmico | |||
TypeScript | ? | opcional | estrutural | estático |
Visual básico | Forte | implícito com digitação explícita opcional | nominal | estático |
Visual Basic .NET | fraco | explícito | estático | |
Visual Prolog | Forte | parcialmente implícito | nominal | estático |
Wolfram Language | Forte | dinâmico | ||
Windows PowerShell | Forte | implícito | dinâmico | |
XL | Forte | nominal | estático | |
Xojo | Forte | explícito | nominal | estático |
XPath / XQuery | Forte | parcialmente implícito | nominal | dinâmico com tipagem estática opcional |
Língua | Segurança de tipo | Expressão de tipo | Compatibilidade de tipo entre os compostos | Verificação de tipo |