Sim, perguntas semelhantes foram feitas, mas sempre com o objetivo de descobrir 'qual é o melhor'.
Estou perguntando porque eu vim como desenvolvedor principalmente em JavaScript e realmente não tenho nenhuma experiência extensa em escrever em linguagens estaticamente tipadas.
Apesar disso, eu definitivamente vejo valor no aprendizado de C para lidar com operações exigentes em níveis mais baixos de código (o que eu assumo tem muito a ver com estática versus dinâmica no nível do compilador), mas o que estou tentando entender é é se existem contextos específicos do projeto (talvez certos tipos de operações dinâmicas com uso intensivo de dados?) envolvendo outras coisas além do desempenho, onde faz muito mais sentido usar Java ou C # versus algo como Python.
fonte
Respostas:
Sim definitivamente.
A digitação dinâmica tem vantagens definidas nos casos em que você deseja tratar tudo como um único tipo. Serialização / desserialização é um dos exemplos clássicos. É por isso que tanta programação na Web é feita em linguagens de script de tipo dinâmico: elas são adequadas para uma tarefa que envolve muita conversão de todos os tipos de dados de e para strings.
Por outro lado, para a programação de aplicativos, as linguagens estáticas funcionam muito melhor porque tentar tratar tudo como um único tipo não é frequentemente um requisito. Você geralmente deseja ter estruturas de dados eficientes com os dados representados como eles mesmos e não sendo convertido para outros tipos com muita frequência. Isso torna os recursos da digitação dinâmica uma desvantagem, e não um benefício, e é por isso que os aplicativos são quase exclusivamente escritos em linguagens estaticamente tipadas.
fonte
Do jeito que eu vejo, se você pode trabalhar naturalmente em uma linguagem de tipo estaticamente, a digitação estática é o caminho a percorrer. Em geral, o objetivo de um sistema de tipos é impedir que você execute operações com semânticas indefinidas
(string) "hello" + (bool) true
. Ter um nível extra de segurança impedindo você de executar essas operações pode ser uma boa maneira de evitar erros no seu código, mesmo sem extensos testes de unidade. Ou seja, a segurança de tipo fornece outro nível de confiança na correção semântica do seu código.Mas os sistemas de tipos são muito difíceis de acertar. Eu não acredito que é um sistema tipo perfeito na natureza no momento da redação deste texto. (Por "sistema de tipos perfeito", quero dizer um sistema de tipos estrito, que não requer anotações de código detalhadas, que não gera erros de tipo falso-positivos e cujos erros de tipo são fáceis para o programador entender.) Além disso, ele pode será difícil entender os sistemas de tipos realmente bons que existem. Quando eu estava aprendendo Haskell, não sei dizer o número de erros de tipo obscuros que recebi ao tentar escrever o que parecia (para mim) o código correto. Normalmente, o código não estava correto (o que é um ponto a favor do sistema de tipos), mas demorou muitode trabalho para entender as mensagens de erro do compilador, para que eu pudesse corrigir os problemas subjacentes. Nas linguagens OO, você pode acabar pensando "esse argumento deve ser contrário ao tipo de entrada, não covariante!" Ou (mais provavelmente) reverter para previsões tipográficas para escapar dos limites do sistema de tipos. Os sistemas de tipos podem ficar muito mais complicados do que você imagina.
Pelo que vale, entendo que a dificuldade em criar bons sistemas de tipos faz parte do que motivou Gilad Bracha a incluir suporte de sistema de tipos conectável no Newspeak.
fonte
São ferramentas diferentes, mas não é por desempenho. É tudo uma questão de complexidade .
As linguagens dinâmicas geralmente visam a flexibilidade máxima e traz falta de validação e uma espécie de garantia. Então, é muito poderoso em programas de pequena escala, mas torna-se quase impossível manter programas de grande escala (complexidade).
Os idiomas estáticos geralmente visam a validação máxima. Seu primeiro objetivo é geralmente capturar erros (ou bugs) o mais cedo possível. Muitas garantias são feitas para a validação. Então é mais difícil aprender e iniciar, mas, à medida que os programas aumentam, ele fornece uma melhor validação do programa com muito menos custo (esforços de codificação).
Como resultado, as linguagens dinâmicas geralmente são adequadas para programas pequenos (quero dizer, muito pequenos), como páginas da Web dinâmicas, DSL do navegador da Web (não para aplicativos de navegador!) Ou scripts de shell. As linguagens estáticas se adaptam melhor às programações do sistema ou a qualquer outro material.
As descrições acima são sobre linguagens estáticas ou puramente dinâmicas. A maioria das linguagens da vida real está entre elas e mostra várias características.
Consulte aqui para obter mais detalhes: https://softwareengineering.stackexchange.com/a/105417/17428
fonte
Atualmente, programa em linguagens estáticas (C # e F #), mas gosto de programar em linguagens dinâmicas (Smalltalk, Ruby). Existem muitos prós e contras que as pessoas associam a um tipo versus outro que são mais sobre o idioma do que quando você aplica tipos. Por exemplo, linguagens dinâmicas geralmente têm uma sintaxe mais limpa e concisa, no entanto, F # e OCaml com seu sistema de inferência de tipo têm uma sintaxe tão limpa quanto qualquer linguagem dinâmica. E com a digitação estática, você tem refatorações automáticas reais e preenchimento automático, mas o Smalltalk, com todo o código-fonte em um banco de dados e cada método compilado separadamente, foi o primeiro idioma a ter refatorações automatizadas sérias e funcionou muito bem. Por fim, hoje em dia, as linguagens dinâmicas e estáticas modernas são seguras ao tipo, que é o aspecto mais importante do seu sistema de tipos,
fonte
Estamos em 2015 agora, o que adiciona alguns trechos interessantes à conversa:
Portanto, os caras do backend estão cansados da camisa de força desnecessária da digitação estrita, enquanto os caras do frontend estão cansados do caos da digitação dinâmica.
Bastante irônico: eu me pergunto se eles se encontrarão no meio, ou passarão um pelo outro com o boom sônico de um prazo passando ...? ;)
fonte