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

Notas

Referências