comparando código digitado estaticamente com código de tipagem dinâmica - custos e benefícios

StackOverflow https://stackoverflow.com/questions/419072

Pergunta

O que quer que seus méritos, o ActionScript 3 presentes da Adobe que pode ser uma oportunidade única para explorar as conseqüências de digitado contra línguas sem tipo, porque é praticamente um super rigoroso de javascript, com todos os benefícios sintáticas / sobrecarga de declarações tipo estrito, fundição declarativa, etc.

O que isto possibilita está comparando o mesmo código escrito em ambos os sentidos, enquanto factoring fora sintaxe da linguagem essencial.

Esta me faz pensar se há alguma evidência quantitativa sobre o benefício real da tipagem forte em particular para a verificação de erros durante a compilação, no que diz respeito às taxas de erro, a produtividade de programação e volume de código; ou são nossas perspectivas inteiramente baseado em especulações e conjecturas? Existem outras línguas que podem ser usados ??em ambos os sentidos (não contando VB à moda antiga -. Não sendo uma linguagem altamente respeitado de qualquer forma)

Eu passei um tempo significativo com ambas as línguas, mas ainda não decidiu de forma conclusiva que a maneira que eu prefiro, e eu prefiro não adicionar à evidência anedótica -. Estou à procura de informações objetivas

Foi útil?

Solução

Esta é uma das grandes guerras religiosas na programação, superado apenas talvez pelo conflito entre o verdadeiro editor Emacs, e a semente do mal de Satanás vi.

Basicamente, se um programa escrito em uma linguagem dinâmica é correto, então ele pode ser convertido em uma linguagem estaticamente digitada e ainda ser correto, e vice-versa. A vantagem de um langfuage verdadeiramente estaticamente digitado é que os erros que aparecem em tempo de execução em uma linguagem dinâmica pode ser identificada em tempo de compilação em uma linguagem estaticamente digitada.

O que muitas vezes fica esquecido nestas situações, porém, é que as linguagens de tipagem estática geralmente têm portinholas (como typecasts), e, aparentemente, linguagens dinâmicas pode usar inferência de tipos inferir, e tratar como tipagem estática, os tipos de expressão aparentemente dinâmica .

O que é realmente importante, sob as cobertas, é o programador. Se o programador pensa o direito programa, então ele vai estar certo em qualquer um estático ou uma linguagem dinâmica. Eu não estou ciente de qualquer boa evidência experimental de que qualquer um é mais produtivo ou mais propenso a erros na prática.

Outras dicas

Na minha opinião, línguas rigidez, como C # pode identificar durante muitos tempo de compilação esquecido erros que não seria pego em uma linguagem digitada solto e seria, portanto, causa um erro de execução mais tarde. Eu não acha que isso é apenas uma especulação, uma vez que a compilação estrita pode antecipar problemas que mais tarde iria causar erros durante a execução. Isso pode potencialmente eliminar a maior parte do tipo de codificação Erros que você ignorar durante a implementação, mas que podem ser facilmente encontrados e corrigidos pelo compilador.

O valor de tipagem estática parece bastante limitado para mim se você acredita, como eu, que você não pode dizer que algo é verdadeiro sobre um pedaço de software a menos que você tem um teste que demonstre que seja o caso. Se você aceitar e praticar isso, então é em grande parte irrelevante para saber se os erros são identificados em tempo de compilação ou em tempo de teste.

Neste ponto, eu prefiro ter o mais sucinto dos dois tipos de linguagens, que na minha experiência tem sido linguagens dinâmicas.

O outro lado, é que tipagem estática realmente só ajuda a você se você não está escrevendo testes. Se for esse o caso, tipagem estática provavelmente não é suficiente para garantir o bom funcionamento do seu software.

O OP e felipecsl estão confusos sobre a terminologia usada quando se fala de disciplinas de digitação.

meios estática digitação tipos são verificados durante tempo de compilação (qualquer meio tempo de compilação no idioma). Tipagem Dinâmica significa tipos são verificados como expressões / declarações estão sendo executados. meios de digitação fortes que não se pode subverter (fundido) um ponteiro para um número inteiro, por exemplo. Typing fraco é o oposto do Typing forte.

Não há "digitação estrita", tanto quanto eu sei.

Agora, para alguém para responder a questão real; -)

digitado fraco requer mais tempo de manutenção. Como os programas se tornam mais complexas, mais problemas surgem devido a não haver um compilador para pegar problemas óbvios. Não é recomendado para grandes projetos complexos. Falo por experiência própria.

Estatisticamente typd lang. Têm as suas variáveis ??e Xpressions como tipos fixos que são explicitamente declarados pelo programador ou inferido por. O compiler.using isso. Info, verificação de tipo aqui vai ser realizado em tempo de compilação. Enquanto dinamicamente digitado lang ter seus valores fixos, mas variáveis ??e xxpressions Arent fixed..due ao facct que sempre que um operando é calculado, é provável para retornar valores diferentes, verificação de tipo é então feito após o operando foi computed.ie após o cálculo, mas antes de realizar a operação em tempo de execução

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top