Existe-t-il des études sur l'efficacité des langages statiquement et dynamiquement typés?
En particulier:
- Mesures de la productivité du programmeur
- Taux de défauts
Comprend également les effets de l’utilisation ou non de tests unitaires.
J'ai vu beaucoup de discussions sur les mérites de chaque côté, mais je me demande si quelqu'un a déjà fait une étude à ce sujet.
productivity
comparison
type-systems
dynamic-typing
static-typing
Winston Ewert
la source
la source
Réponses:
Quelques suggestions de lecture:
Pas exactement sur le typage statique, mais lié:
Quelques articles ou essais intéressants sur le sujet ou sur l'analyse statique des programmes en général:
Et pour ceux qui se demanderaient de quoi il s'agit:
Cependant, je doute qu'aucun de ceux-ci ne vous donne une réponse directe, car ils ne font pas exactement l'étude que vous recherchez. Ils seront intéressants à lire cependant.
Personnellement, Je considère fermement que le typage statique par rapport au typage dynamique facilite la détection des bogues. Je passe beaucoup trop de types à chercher des fautes de frappe et des erreurs mineures comme celles-ci dans JavaScript ou même le code Ruby. Et pour ce qui est de penser que le typage dynamique vous donne un coup de pouce à la productivité, je pense que cela revient essentiellement à l’outillage. Si les langages à typage statique disposent des outils appropriés pour permettre la recompilation en arrière-plan et fournir une interface REPL, vous bénéficiez des avantages des deux mondes. Scala fournit cela par exemple, ce qui facilite l'apprentissage et le prototypage dans la console interactive, mais vous offre les avantages du typage statique (et d'un système de type plus fort que beaucoup d'autres langages, hormis les langages ML). De même, je ne pense pas que Java ou C ++ me cause une perte de productivité (à cause du typage statique), tant que j'utilise un IDE qui m'aide à avancer. Lorsque je ne retourne au codage qu'avec des configurations simples (éditeur + compilateur / interprète), le logiciel semble plus lourd et les langages dynamiques semblent plus faciles à utiliser. Mais vous continuez à chasser les insectes. J'imagine que les gens diraient que la question de l'outillage est un argument réversible, car si l'outillage était préférable pour les langages dynamiques, la plupart des erreurs et des fautes de frappe seraient signalées au moment du codage, mais cela reflète la faille du système, à mon avis. Malgré tout, je prototype habituellement dans JRuby et coderai plus tard en Java la plupart de mes tâches. comme si les outils étaient meilleurs pour les langages dynamiques, alors la plupart des bogues et des fautes de frappe seraient signalés au moment du codage, mais à mon avis, cela reflète la faille du système. Malgré tout, je prototype habituellement dans JRuby et coderai plus tard en Java la plupart de mes tâches. comme si les outils étaient meilleurs pour les langages dynamiques, alors la plupart des bogues et des fautes de frappe seraient signalés au moment du codage, mais à mon avis, cela reflète la faille du système. Malgré tout, je prototype habituellement dans JRuby et coderai plus tard en Java la plupart de mes tâches.
AVERTISSEMENT: certains de ces liens ne sont pas fiables et d'autres passent par des portails de différentes sociétés informatiques utilisant des accès payants pour les membres. Désolé, j'ai essayé de trouver plusieurs liens pour chacun d'entre eux, mais ce n'est pas aussi bon que je le souhaiterais.
la source
Hier encore, j'ai trouvé cette étude: les tests unitaires ne suffisent pas. Vous devez aussi taper statique.
En gros, l'auteur utilisait un outil capable de convertir automatiquement un projet d'un langage de frappe non statique en un langage de frappe statique (python en haskell).
Il a ensuite sélectionné un certain nombre de projets Python Open Source comprenant également un nombre raisonnable d'unités de test et les a automatiquement convertis en haskell.
La traduction en Haskell a révélé une série d'erreurs liées au type des variables: les erreurs n'ont pas été découvertes par les unités de test.
la source
Mon avis. Il existe peu de preuves que les langages à typage dynamique sont plus productifs, mais ce n’est pas concluant. (1) De nombreux facteurs n'étaient pas contrôlés, (2) il y a trop peu d'études, (3) il y a eu peu ou pas de discussion sur ce qui constitue une méthode d'essai appropriée.
la source
Voici un point de départ:
Le document conteste la sagesse généralement reçue selon laquelle, toutes choses étant égales par ailleurs, les programmeurs écrivent le même nombre de lignes de code à la fois, quelle que soit la langue. En d'autres termes, le document devrait servir de preuve empirique à l'appui du fait que la productivité mécanique (lignes de code écrites) n'est pas une bonne mesure de la productivité fonctionnelle et doit au moins être normalisée par le langage.
la source
J'ai trouvé un langage statique versus un langage dynamique: une revue de littérature qui répertorie quelques études sur le sujet et donne un bon résumé sur chaque étude.
Voici le résumé:
la source
Honnêtement, je ne pense pas que taper statique ou dynamique soit la vraie question.
Je pense qu'il y a deux paramètres qui devraient venir en premier:
Si vous êtes à l'aise dans cette langue, vous écrirez du code et vous pourrez facilement localiser les bogues.
Si vous écrivez du code découplé et testez chaque fonctionnalité de manière approfondie, vous produirez du code bien rodé et vous serez donc productif (car vous ne pouvez pas être considéré comme productif si vous n'évaluez pas la qualité du produit, n'est-ce pas? )
J’estimerais donc que le débat statique / dynamique en matière de productivité est tout à fait théorique, ou du moins, largement dépassé par d’autres considérations.
la source
Voici quelques-uns:
Stefan Hanenberg. 2010. Une expérience sur les systèmes de types statiques et dynamiques: des doutes sur l'impact positif des systèmes de types statiques sur le temps de développement. Dans Actes de la conférence internationale ACM sur les langages et applications pour systèmes de programmation orientée objet (OOPSLA '10). ACM, New York, NY, États-Unis d'Amérique, 22-35. DOI = 10.1145 / 1869459.1869462 http://doi.acm.org/10.1145/1869459.1869462
Daniel P. Delorey, Charles D. Knutson et Scott Chun, "Les langages de programmation affectent-ils la productivité? Une étude de cas utilisant des données de projets Open Source", p. 8, Premier atelier international sur les nouvelles tendances en matière de recherche-développement sur les logiciels libres (FLOSS) '07: Ateliers ICSE 2007), 2007
Daly, M .; Sazawal, V., Foster, J .: Work in Progress: une étude empirique du typage statique en Ruby, atelier sur l'évaluation et l'utilisabilité des langages et des outils de programmation (PLATEAU) à ON-WARD 2009.
Lutz Prechelt et Walter F. Tichy. 1998. Une expérience contrôlée pour évaluer les avantages de la vérification du type d'argument de procédure. IEEE Trans. Softw. Eng. 24, 4 (avril 1998), 302-312. DOI = 10.1109 / 32.677186 http://dx.doi.org/10.1109/32.677186
la source