Por que os idiomas de tipo fraco ainda estão sendo desenvolvidos ativamente?

17

Eu me pergunto por que as linguagens de tipo fraco ainda estão sendo ativamente desenvolvidas. Por exemplo, que benefício se pode tirar por escrever

$someVar = 1;
(...)  // Some piece of code
$someVar = 'SomeText';

em vez de usar a versão muito diferente e de tipo forte

int someInt = 1;
(...)
string SomeString = 'SomeText';

É verdade que você precisa declarar uma variável adicional no segundo exemplo, mas isso realmente dói? Todos os idiomas não devem se esforçar para ser fortemente tipados, uma vez que reforçam a segurança de tipo no tempo de compilação, evitando assim algumas armadilhas na conversão de tipo?

DotNetStudent
fonte
9
"Fortemente digitado" não é um termo bem definido. Principalmente significa "você não pode subverter o sistema de tipos". É ortogonal ao que você descreve acima, que pode ser de tipo latente versus manifesto ou estático versus dinâmico.
Frank Shearar
10
O que sinto falta que move isso da isca de chama com várias perguntas intimamente relacionadas, possivelmente até duplicadas (basta pesquisar no SackOverflow por perguntas que mencionem digitação estática e dinâmica em suas tags) para uma pergunta legítima?
1
Existem vantagens e desvantagens para os idiomas estaticamente e dinamicamente. As linguagens tipadas dinamicamente se prestam de maneira rápida ao desenvolvimento ou prototipagem rápida (daí a razão pela qual as "linguagens de script" geralmente são tipicamente dinamicamente), enquanto as linguagens tipicamente estaticamente (sem dúvida) são mais fáceis de manter e estender à medida que crescem em projetos grandes e complicados.
Charles Salvia
6
O primeiro exemplo é um pouco como o Python, onde variáveis não têm tipo declarado. No entanto, Python é uma linguagem de tipo muito forte, porque os objetos - eles mesmos - têm um tipo quase impossível de alterar ou coagir. Eu acho que o uso indevido da terminologia torna essa pergunta muito difícil de responder.
S.Lott 22/10
1
@ delnan O fato de esta pergunta ter duas respostas razoáveis ​​e não se transformar em uma guerra de chamas ajuda.
Adam Lear

Respostas:

25

Tipagem forte / fraca e tipagem estática / dinâmica são ortogonais.

Forte / fraco é sobre se o tipo de valor é importante, funcionalmente falando. Em um idioma de tipo fraco, você pode pegar duas cadeias que são preenchidas com dígitos e executar a adição de números inteiros; em um idioma de tipo forte, isso é um erro (a menos que você converta ou converta os valores nos tipos corretos primeiro). A digitação forte / fraca não é uma coisa em preto e branco; a maioria dos idiomas não é 100% rigorosa nem 100% fraca.

A digitação estática / dinâmica é sobre se os tipos se ligam a valores ou a identificadores. Em um idioma de tipo dinâmico, você pode atribuir qualquer valor a qualquer variável, independentemente do tipo; a digitação estática define um tipo para cada identificador e a atribuição de um tipo diferente é um erro ou resulta em uma conversão implícita. Algumas linguagens adotam uma abordagem híbrida, permitindo tipos declarados estaticamente, bem como identificadores não tipados ('variante'). Também há inferência de tipo, um mecanismo em que a digitação estática é possível sem declarar explicitamente o tipo de tudo, fazendo com que o compilador descubra os tipos (Haskell usa isso extensivamente, o C # o expõe por meio da varpalavra - chave).

A programação dinâmica fraca permite uma abordagem pragmática; o idioma não fica no seu caminho a maior parte do tempo, mas também não entra em cena quando você leva um tiro no pé. A digitação estática forte, por outro lado, leva o programador a expressar determinadas expectativas sobre valores explicitamente no código, de uma maneira que permita ao compilador ou intérprete detectar uma classe de erros. Com um bom sistema de tipos, um programador pode definir exatamente o que pode ou não ser feito com relação a um valor e, por acidente, alguém tenta algo indesejado, o sistema de tipos geralmente pode impedi-lo e mostrar exatamente onde e por que as coisas dão errado.

tdammers
fonte
Em uma linguagem adequada e de tipo fraco, como o HyperTalk, com operadores separados para concatenação e adição de strings (por exemplo, assumir &para concatenação), operações como "12"+3ou 45 & "6"não apresentam ambiguidade (elas calculam 15 e "456", respectivamente). Em uma linguagem de tipo mais forte, o operador "+" pode ser sobrecarregado com segurança para concatenação de strings e adição numérica sem causar ambiguidade, pois as operações em strings e números são proibidas. Os problemas surgem quando o idioma especifica as unhas, nem os tipos nem as operações a serem executadas.
Supercat
4

Digitação fraca é mais parecida com 1 == "TRUE". Esta seção na wikipedia ilustra bem a diferença.

Observe que nenhum exemplo da wikipedia é estaticamente digitado, o que você se refere no seu segundo exemplo.

Portanto, se a pergunta é: por que as pessoas usam linguagens dinamicamente digitadas, a resposta é: sistemas de tipo estático impõem limitações a você. Muitas pessoas simplesmente nunca trabalharam com um sistema de tipo estático expressivo, o que os leva à conclusão de que as desvantagens da tipagem estática superam os benefícios.

back2dos
fonte
0

Idiomas de tipos fracos ainda estão sendo desenvolvidos porque as pessoas os usam e gostam deles. Se você não gosta de digitação fraca, não use idiomas de digitação fraca. Declarar que algo é o único caminho verdadeiro e que todos devem fazê-lo O único caminho verdadeiro ignora a complexidade do mundo.

mjfgates
fonte
0

Todos os idiomas não devem se esforçar para ser fortemente tipados, uma vez que reforçam a segurança de tipo no tempo de compilação, evitando assim algumas armadilhas na conversão de tipo?

Não necessariamente. Objetivo de Aprendizagem-C: Uma cartilha aborda essa questão diretamente no contexto da Objetiva-C:

Variáveis ​​de tipo fraco são usadas frequentemente para coisas como classes de coleção, nas quais o tipo exato dos objetos em uma coleção pode ser desconhecido. Se você está acostumado a usar linguagens fortemente tipadas, pode pensar que o uso de variáveis ​​fracamente tipificadas causaria problemas, mas elas realmente oferecem uma tremenda flexibilidade e permitem um dinamismo muito maior nos programas Objective-C.

Caleb
fonte