2009-02-27 9 views
2

J'ai utilisé des langages statiques tels que C#, Java, C et certains ont fait du travail en Javascript qui est une langue dynamique.Dans quelles circonstances les langages dynamiques sont-ils appropriés?

Contrairement à la croyance populaire, je me retrouve à écrire du code plus rapide en C# qu'en Javascript (et cela pourrait être parce que j'ai plus d'expérience en C# par rapport à javascript)

Alors, ce que je veux comprendre est que Quels sont les endroits où le langage dynamique est approprié et peut être favorisé par rapport aux langages statiques?

Un langage dynamique peut-il être utilisé pour le système Enterprise qui doit être maintenu pour les années à venir ou est-il principalement utilisé pour l'utilisation et le lancement de codes?

+0

Ce ne devrait pas être un wiki? –

+0

En outre, je n'ai pas encore vu un IDE de langage dynamique capable d'approcher ce que les IDE statiques peuvent faire. Un bon IDE peut fournir un énorme coup de pouce à la productivité. – MichaelGG

+0

Jetez un oeil à: http://stackoverflow.com/questions/493973/uses-for-dynamic-languages/667275#667275 – Dan

Répondre

3

J'utiliserais un langage dynamique quand la simplicité et la flexibilité compteraient plus que la performance et l'explicite. Le typage statique donne au compilateur beaucoup d'informations qui peuvent être utilisées pour écrire du code assembleur vraiment rapide. Cela rend également les contrats explicites, en rendant éventuellement les sections de code plus faciles à raisonner isolément. Cependant, parce que ces contrats sont si explicites et ont des effets d'entraînement à travers tant de code, ils sont quelque peu difficiles à changer. Dans les systèmes qui nécessitent un haut degré de flexibilité, cela peut créer beaucoup de complexité pour contourner la rigidité du typage statique.

Personnellement, je ne vois pas l'absence de vérification de type statique pour être un gros problème. Bien sûr, échouer au moment de la compilation est l'échec rapide idéal. Cependant, le paradigme du langage dynamique n'est pas vraiment mauvais. Lorsqu'une erreur de type se produit au moment de l'exécution dans une langue dynamique, les choses échouent immédiatement et avec des messages d'erreur explicites. Vous n'obtenez pas seulement un comportement bizarre indéfini et un échec dans un endroit complètement différent. D'autre part, je trouve qu'un bon système de gabarit (pas C++) et l'inférence de type statique peuvent être une aubaine absolue. Cela vous permet d'avoir le meilleur des deux mondes, car il s'agit essentiellement de la dactylographie dynamique à la compilation. Tout est encore vérifié statiquement au moment de la compilation. Les erreurs sont détectées rapidement et un code d'assemblage efficace est généré. Néanmoins, vous gardez la flexibilité de ne pas avoir à rendre les contrats explicites au moment de la conception. Je crois comprendre que Haskell, OCaml, etc. le font très bien. Si vous êtes intéressé par un langage avec un aspect plus général qui fait cela, essayez D.

+0

+1 - Pour souligner la simplicité et la flexibilité. – Ramesh

0

Une sitauation montrant l'utilité de la dynamique C# 4.0. Disons que vous avez un contrôle qui peut contenir un pour deux contrôles. Les deux od ont la propriété DataSource, mais pas cette superclasse commune. Afin de le rendre clair, vous pouvez utiliser la dynamique pour vérifier si la propriété existe au niveau de l'exécution.

Un autre scénario implique une modification de la classe durring runtime basée sur conditionnelle. Disons que vous voulez que la fonction A() soit dans la classe B si seulement la fonction C() retourne vrai. Cela peut être fait en JavaScript, mais C# ne peut pas le faire.

+0

Ne causera-t-il pas la confusion et la maintenance si le comportement d'un objet est modifié à l'exécution? – Ramesh

+0

Il peut. Mais il peut y avoir un cas dans lequel cela serait nécessaire. – Migol

+0

Le typage dynamique est un mauvais moyen d'aborder votre premier exemple. Si deux classes ont une structure similaire, mais n'héritent pas/implémentent un type commun, les contraintes de membre, le typage structurel ou une sorte de classe de types semblent mieux convenir. – MichaelGG

3

Je ne pense pas que vous puissiez généraliser comme ça. Les langages dynamiques/non dynamiques peuvent tous les deux être utiles dans le même domaine, qui comprend à peu près tout.

+0

Je suis inquiet au sujet de maintenir un code qui est dynamique à l'exécution. Les applications d'entreprise peuvent-elles utiliser des langages dynamiques et ne pas entrer dans l'enfer de la maintenance? – Ramesh

+0

Oui, pourquoi pas? L'enfer de la maintenance est un produit de mauvaise conception, pas de savoir si le langage est dynamique/statique. –

+0

Je suis d'accord, mais les langages dynamiques peuvent facilement devenir un problème de maintenance par rapport à statique était ma compréhension. En outre, les langages dynamiques peuvent-ils être utilisés pour les applications en temps réel critiques? – Ramesh

0

JavaScript n'est pas le meilleur exemple. Vous devriez jeter un oeil à Python, Ruby ou Groovy.

+0

ou Lua, Scheme, arc ... – Javier

+0

JavaScript a de belles extensions e4x. – Dan

+0

@Dan mais ce que e4x a à voir avec les langages dynamiques? réflexion, introspection, fermetures etc. ce sont des fonctionnalités qui diffèrent vraiment des langages dynamiques, des langages statiques. – vartec

0

Je voudrais souligner que les types de langage dynamique peuvent avoir leurs types implicitement définis par le programmeur, la même chose qu'un langage statique. Une bonne chose à propos des langages dynamiques est que vous pouvez écrire des stubs de méthode qui appellent des objets et des méthodes qui n'existent pas réellement. Cela peut être sympa de concevoir le code en premier et de remplir les détails plus tard. Bien quand vous travaillez en équipe.Ne vous inquiétez pas, si vous faites cela, le compilateur vous avertira que l'appel de la méthode ne fonctionnera probablement pas. Le compilateur vous permettra de coder et d'exécuter ce code.

Les langages dynamiques sont puissants, mais leur puissance peut parfois rendre leur débogage plus difficile.