1231 votes

Quelle est la différence entre typé statiquement et dynamiquement typé langues?

J'entends beaucoup que de nouveaux langages de programmation sont typées dynamiquement mais qu'est-ce que ça signifie quand on dit qu'un langage dynamiquement typé vs typé statiquement?

Merci

1113voto

NomeN Points 4106

Un langage statiquement typé si le type d'une variable est connue au moment de la compilation. Cela signifie en pratique que vous en tant que programmeur doit spécifier quel type de chaque variable. Exemple: Java, C, C++

Le principal avantage ici est que tous les types de vérification peut être effectuée par le compilateur, et donc beaucoup de stupide bugs sont pris à un stade très précoce.

Un langage dynamiquement typé si le type d'une variable est interprété à l'exécution. Cela signifie que vous en tant que programmeur peut écrire un peu plus rapide, car vous n'avez pas à spécifier le type à chaque fois. Exemple: Perl

La plupart des langages de script ont cette fonctionnalité, il n'y a pas de compilateur pour faire le typage statique de toute façon, mais vous risquez de vous retrouver à la recherche d'un bug qui est due à l'interprète de mal interpréter le type d'une variable. Heureusement, les scripts ont tendance à être petit, de sorte que les bugs n'ont pas beaucoup d'endroits pour se cacher.

Plus typées dynamiquement des langues ne permettent de fournir des informations de type, mais ne l'exige pas. Une langue qui est actuellement en cours de développement (Rascal) prend une approche hybride permettant le typage dynamique à l'intérieur des fonctions mais l'application de typage statique pour la signature de la fonction.

522voto

Christopher Tokar Points 3112

Typé statiquement langages de programmation n'type de vérification (le processus de vérification et de faire respecter les contraintes de types) au moment de la compilation, par opposition à l'exécution.

Dynamiquement typé langages de programmation n'type de vérification au moment de l'exécution, par opposition à la Compilation.

47voto

Jacob Points 22306

http://en.wikipedia.org/wiki/Type%5Fsystem

Le typage statique

Un langage de programmation est dit d'utiliser le typage statique lors de la vérification de type est effectué lors de la compilation du temps opposition à l'exécution. En typage statique, les types sont associées à des variables pas de valeurs. Les langages statiquement typés inclure Ada, C, C++, C#, JADE, Java, Fortran, Haskell, ML, Pascal, Perl (à l'égard de la distinction les scalaires, les tableaux, les hachages et les les sous-routines) et Scala. Le typage statique est une forme limitée de programme de vérification (voir type de sécurité): en conséquence, il permet à beaucoup de type de les erreurs détectées à un stade précoce dans le cycle de développement. Type statique pions d'évaluer uniquement le type d' information qui peut être déterminée à moment de la compilation, mais sont en mesure de vérifier que le vérifié les conditions pour tenir possible toutes les exécutions de l' le programme, qui élimine le besoin de type de répéter vérifie à chaque fois que l' le programme est exécuté. L'exécution du programme peut également être rendu plus efficace (c'est à dire plus rapide ou réduction de la mémoire) par l'omission d'exécution type de contrôles et permettant à d'autres optimisations.

Car ils évaluent les informations de type lors de la compilation, et donc l'absence le type d'informations qui ne sont disponibles au moment de l'exécution, de type statique les pions sont conservateurs. Ils rejeter certains programmes qui peuvent être bien comportés au moment de l'exécution, mais qui ne peut pas être déterminé statiquement à bien typé. Par exemple, même si un expression toujours renvoie la valeur true au moment de l'exécution, un programme contenant le code

if <complex test> then 42 else <type error>

sera rejetée comme mal tapé, parce que une analyse statique ne peut pas déterminer que l'autre branche ne pas être prises.[1] Le conservateur comportement de type statique de dames est avantageux lors de l' false rarement: Un type statique vérificateur peut détecter le type de les erreurs dans les rarement utilisé chemins de code. Sans vérifier le type statique, même code tests de couverture à 100% de code la couverture peut être pas en mesure de trouver ces les erreurs de type. La couverture de Code tests peuvent ne parviennent pas à détecter ce type d'erreurs car la combinaison de tous les lieux où les valeurs sont créés et tous les les endroits où une certaine valeur est utilisée doit être pris en compte.

Le plus largement utilisé type statique les langues ne sont pas formellement type de coffre-fort. Ils ont des "failles" dans le langage de programmation spécification permettant aux programmeurs d'écrire du code qui contourne la vérification effectuée par un type statique checker et afin de répondre à un éventail plus large de problèmes. Par exemple, Java et plus de style C les langues de type beaucoup les jeux de mots, et Haskell a des caractéristiques telles que unsafePerformIO: de telles opérations peuvent être dangereux lors de l'exécution, en ce qu'ils peuvent provoquer des comportements indésirables en raison de incorrect typage des valeurs lors de l' le programme s'exécute.

Typage dynamique

Un langage de programmation est dit dynamiquement typé, ou tout simplement "dynamique", quand la majorité de ses la vérification de type est effectué au moment de l'exécution, par opposition à au moment de la compilation. En typage dynamique, les types sont associés à des valeurs qui ne sont pas les variables. Dynamiquement typé langues inclure Groovy, JavaScript, Lisp, Lua, Objective-C, Perl (à l'égard de types définis par l'utilisateur, mais pas intégré types), PHP, Prolog, Python, Ruby, Smalltalk et Tcl. Par rapport à la statique tapant, typage dynamique peut être plus flexible (par exemple, en permettant à des programmes de générer des types et de la fonctionnalité de base au moment de l'exécution des données), mais à la charge de moins d'a priori des garanties. C'est parce qu'un typées dynamiquement langue accepte et tente de exécuter certains programmes qui peuvent être jugé comme non valide par un type statique checker.

Typage dynamique peut entraîner l'exécution les erreurs de type-qui est, au moment de l'exécution, un la valeur peut avoir un type inattendu, et une opération absurde pour ce type est appliqué. Cette opération peut se produire longtemps après le lieu où la erreur de programmation a été faite-est, l'endroit où le mauvais type de données passé dans un endroit où il ne devrait pas ont. Cela rend le bug difficile à recherchez.

Typées dynamiquement des systèmes de langue, par rapport à leurs statiquement typé les cousins, les rendre moins "au moment de la compilation" vérifie sur le code source (mais vérifier, par exemple, que le programme est syntaxiquement correct). Au moment de l'exécution les vérifications peuvent potentiellement être plus sophistiqué, étant donné qu'ils peuvent utiliser dynamique de l'information ainsi que toute l'information qui était présent lors de la compilation. D'autre part, d'exécution vérifie seulement affirmer que conditions de détenir dans un particulier l'exécution du programme, et ces des contrôles sont répétées pour chaque l'exécution du programme.

Développement dans typées dynamiquement langues est souvent pris en charge par pratiques de programmation tels que l'unité de les tests. Les tests est un élément clé de la pratique dans professionnel de développement de logiciels, et est particulièrement important dans les dynamiquement typé langues. Dans pratique, les tests effectués pour s'assurer corriger le fonctionnement du programme peut détecter un gamme beaucoup plus large d'erreurs que statique la vérification de type, mais à l'inverse ne peut pas recherche de la manière la plus complète pour la les erreurs que les deux tests et statique type de vérification sont en mesure de détecter. Les tests peuvent être incorporés dans la logiciel de cycle de production, auquel cas il peut être considéré comme un "moment de la compilation" vérifier, dans le programme utilisateur ne pas avoir à exécuter manuellement ces tests.

Références

  1. Pierce, Benjamin (2002). Les Types et les Langages de Programmation. MIT Press. ISBN 0-262-16209-1.

-17voto

Prakhyat Points 120

Le Typage Statique: Les langages tels que Java et Scala sont statiques tapé.

Les variables doivent être définies et initialisé avant qu'elles soient utilisées dans un code.

pour ex. int x; x = 10;

Système..println(x);

Typage Dynamique: Perl est une dynamique tapé la langue.

Les Variables n'ont pas besoin d'être initialisé avant qu'ils soient utilisés dans le code.

y=10; utilisation de cette variable dans la dernière partie de code

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X