Pourquoi les langues faiblement typées sont-elles toujours activement développées?

17

Je me demande pourquoi les langues faiblement typées sont toujours activement développées. Par exemple, quel avantage peut-on tirer de pouvoir écrire

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

au lieu d'utiliser la version très différente et typée

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

Il est vrai que vous devez déclarer une variable supplémentaire dans le deuxième exemple, mais est-ce que cela fait vraiment mal? Toutes les langues ne devraient-elles pas s'efforcer d'être fortement typées car elles renforcent la sécurité des types au moment de la compilation, évitant ainsi certains écueils dans la transcription de types?

DotNetStudent
la source
9
"Fortement typé" n'est pas un terme bien défini. Généralement, cela signifie "vous ne pouvez pas renverser le système de type". Il est orthogonal à ce que vous décrivez ci-dessus, qui peut être latent par rapport au typage manifeste ou statique par rapport au typage dynamique.
Frank Shearar
10
Qu'est-ce qui me manque qui fait passer l'appât à la flamme avec plusieurs questions étroitement liées, sans doute même en double (recherchez simplement SackOverflow pour les questions mentionnant la frappe statique et dynamique dans leurs balises) à une question légitime?
1
Il y a des avantages et des inconvénients à la fois dans les langages typés statiquement et dynamiquement. Les langages typés dynamiquement se prêtent bien au développement rapide ou au prototypage (d'où la raison pour laquelle les «langages de script» sont généralement typés dynamiquement), tandis que les langages typés statiquement (sans doute) sont plus faciles à maintenir et à étendre à mesure qu'ils se transforment en grands projets complexes.
Charles Salvia du
6
Le premier exemple est un peu comme Python où les variables n'ont pas de type déclaré. Cependant, Python est un langage très fortement typé car les objets - eux-mêmes - ont un type qui est presque impossible à modifier ou à contraindre. Je pense que l'utilisation abusive de la terminologie rend cette question très difficile à répondre.
S.Lott
1
@delnan Le fait que cette question a deux réponses raisonnables et ne se soit pas transformée en une guerre de flammes aide.
Adam Lear

Réponses:

25

Le typage fort / faible et le typage statique / dynamique sont orthogonaux.

Fort faible est de savoir si le type de valeur importe, fonctionnellement parlant. Dans une langue faiblement typée, vous pouvez prendre deux chaînes qui se trouvent être remplies de chiffres et effectuer une addition entière sur celles-ci; dans une langue fortement typée, il s'agit d'une erreur (sauf si vous convertissez ou convertissez d'abord les valeurs en types corrects). La frappe forte / faible n'est pas une chose en noir et blanc; la plupart des langues ne sont ni 100% strictes ni 100% faibles.

Le typage statique / dynamique consiste à savoir si les types se lient à des valeurs ou à des identificateurs. Dans un langage à typage dynamique, vous pouvez attribuer n'importe quelle valeur à n'importe quelle variable, quel que soit le type; le typage statique définit un type pour chaque identificateur, et l'affectation à partir d'un type différent est soit une erreur, soit une conversion implicite. Certaines langues adoptent une approche hybride, permettant des types déclarés statiquement ainsi que des identifiants non typés («variante»). Il y a aussi l'inférence de type, un mécanisme où le typage statique est possible sans déclarer explicitement le type de tout, en demandant au compilateur de comprendre les types (Haskell l'utilise intensivement, C # l'expose à travers levar mot clé).

Une programmation dynamique faible permet une approche pragmatique; la langue ne vous gêne pas la plupart du temps, mais elle n'intervient pas non plus lorsque vous vous tirez une balle dans le pied. Un typage statique fort, en revanche, pousse le programmeur à exprimer explicitement certaines attentes concernant les valeurs dans le code, d'une manière qui permet au compilateur ou à l'interpréteur de détecter une classe d'erreurs. Avec un bon système de type, un programmeur peut définir exactement ce qui peut et ne peut pas être fait pour une valeur, et si, par accident, quelqu'un essaie quelque chose de indésirable, le système de type peut souvent l'empêcher et montrer exactement où et pourquoi les choses tournent mal.

tdammers
la source
Dans un langage propre faiblement typé comme HyperTalk avec des opérateurs séparés pour la concaténation et l'addition de chaînes (par exemple, supposons &pour la concaténation), les opérations comme "12"+3ou 45 & "6"ne posent aucune ambiguïté (elles calculent respectivement 15 et "456"). Dans un langage plus fortement typé, l'opérateur "+" pourrait être surchargé en toute sécurité pour la concaténation de chaînes et l'ajout numérique sans provoquer d'ambiguïté car les opérations sur les chaînes et les nombres seraient interdites. Des problèmes surviennent lorsque le langage ne précise ni les types ni les opérations à effectuer.
supercat
4

Un typage faible est plus dans le sens de 1 == "TRUE". Cette section sur le wikipedia illustre bien la différence.

Veuillez noter qu'aucun des exemples de wikipedia n'est tapé statiquement, ce à quoi vous faites référence dans votre deuxième exemple.

Donc, si la question est de savoir pourquoi les gens utilisent des langages typés dynamiquement, alors la réponse est: les systèmes de type statiques vous imposent des limites. Beaucoup de gens n'ont tout simplement jamais travaillé avec un système de type statique expressif, ce qui les amène à conclure que les inconvénients du typage statique l'emportent sur les avantages.

back2dos
la source
0

Les langages de types faibles sont toujours en cours de développement car les gens les utilisent et les aiment. Si vous n'aimez pas le typage faible, n'utilisez pas de langues faiblement typées. Déclarant que quelque chose est la seule vraie voie et que tout le monde devrait le faire, la seule vraie voie ignore la complexité du monde.

mjfgates
la source
0

Toutes les langues ne devraient-elles pas s'efforcer d'être fortement typées car elles renforcent la sécurité des types au moment de la compilation, évitant ainsi certains écueils dans la transcription de types?

Pas nécessairement. Learning Objective-C: A Primer aborde cette question directement dans le contexte d'Objective-C:

Les variables faiblement typées sont fréquemment utilisées pour des choses telles que les classes de collection, où le type exact des objets dans une collection peut être inconnu. Si vous avez l'habitude d'utiliser des langages fortement typés, vous pourriez penser que l'utilisation de variables faiblement typées poserait des problèmes, mais ils offrent en fait une flexibilité considérable et permettent un dynamisme beaucoup plus important dans les programmes Objective-C.

Caleb
la source