Je trouve frustrant de voir que la rapidité de développement des langages dynamiques devrait être considérablement compromise par le manque de complétions et d’autres ressources que les IDE vous donneraient dans leurs équivalents statiques.
Il ne suffit pas de moins taper au clavier: il s'agit d'améliorer votre productivité et de vous amuser en parcourant les API sans avoir à vous référer constamment à une documentation qui n'est pas intégrée à l'éditeur.
À ce jour, toutes les combinaisons de langues dynamiques IDE + - qui pour être juste ne sont pas si nombreuses - que j'ai essayées sont les suivantes:
- petit chariot
- lent
- désemparés / trop enthousiastes (comme pour montrer toutes les finitions possibles)
- ou tout simplement pas aussi complet que, par exemple, Eclipse + Java.
Je suis conscient que l'analyse de code dynamique n'est pas une tâche triviale. Mais on ne peut s'empêcher de se demander: est-ce que ce code est vraiment si difficile à comprendre ?
Donc ma question est:
Des IDE particuliers (ou des configurations moins complètes) ont-ils atteint un support totalement exceptionnel pour un langage dynamique, ou s'agit-il encore d'un problème «non résolu»?
Réponses:
Smalltalk - un langage très dynamique - a toujours eu un superbe IDE, dans lequel de petites choses comme le refactoring automatique, SUnit (le grand-parent de tous les frameworks * Unit), "qui envoie ce message?", "Qui implémente cette méthode?" et similaires ont été lancés. Alors oui, les IDE peuvent en effet prendre en charge les langages dynamiques à un niveau qui, jusqu'à tout récemment, dépassait de loin ceux des langages statiques.
S. Lott déclare que "les langages dynamiques ne peuvent pas avoir le même type de complétion de code que les langages statiques. C'est essentiellement impossible."
"Essentiellement impossible" au sens théorique et absolutiste? Sûr. Dans un sens pratique? Pas vraiment. Il y a plusieurs façons de type déduisent pour les langages dynamiques, statiquement ( k-CFA , RoelTyper ), au moment de l' exécution ( PICs ), et d' autres méthodes, comme l' utilisation de l' histoire récente d'un programmeur - « Comment l' histoire du programme peut améliorer l' achèvement du code » .
Certes, les communautés Pharo et Squeak sont très satisfaites de leurs outils de complétion de code .
la source
Presque tout ce que vous savez des IDE a été développé pour la première fois en Smalltak, un langage dynamique. Tout le reste ne fait que les copier. Il est donc clair que toutes ces fonctionnalités sont possibles dans des langages dynamiques.
Aujourd'hui, les langages dynamiques sont derrière les langages statiques. Mais pourquoi?
Jusqu'à récemment, on pensait généralement que le typage statique était supérieur au typage dynamique. De nombreux codeurs ont changé d'avis plus récemment sur ce point. Le focus sur les IDE pour les langages typés de manière dynamique n'était pas là.
Je pense que les fonctionnalités pour les IDE sont moins utiles dans les langages à typage dynamique. Lorsque je travaille en Java ou en Objective-C, j'estime que l'IDE est nécessaire pour m'aider à travailler avec le langage, mais ce n'est pas le cas des langages dynamiques.
Certaines parties de la tâche sont plus faciles dans un langage statique. Il est facile de comprendre le type d'une expression. Faire la même chose dans un langage dynamique nécessite une analyse complète du programme ou la journalisation des types pendant l'exécution. Étant donné que beaucoup de ce que l'EDI tourne autour des types, cela a un effet.
la source
I think that the features for IDEs are less useful in dynamically typed languages
- C'est drôle, je pense exactement le contraire. Comme de nombreux langages dynamiques ne vous obligent pas à déclarer les variables à l’avance, mal orthographier une variable est une préoccupation sérieuse… une préoccupation qui est atténuée par un bon IDE. Pendant ce temps, les autres fonctionnalités principales - coloration syntaxique, outils de refactoring, fonctionnalités de débogage - sont également utiles dans toutes les langues.workOrder
et d'autres écriventworkorder
. Ce sont deux variables distinctes en Python> _ <J'ai rencontré ce problème avec python, en quelque sorte. Je voulais vim en tant qu'éditeur, mais cela signifiait que je n'aurais pas d'environnement IDE. Je me suis donc lancé avec les plugins vim. Actuellement, je pense avoir un meilleur environnement de développement que n'importe quel IDE que j'ai utilisé par le passé.
Ma configuration est hébergée sur github , n'hésitez pas à jeter un coup d'œil et à écrire ce que vous aimez. Pour un aperçu rapide des plugins:
Il y a quelques autres choses, mais il a toutes les fonctionnalités que les IDE les plus populaires ont. Cela ne m'a pas coûté un centime et je tire parti de toute la puissance de Vim. Fractures, commandes de mouvement, registres, sauts, capacité à exécuter tout mon environnement de développement avec le clavier ...
la source
Étant donné que votre évaluation est difficile à comprendre ("totalement remarquable"? "Sans intelligence / trop enthousiaste"?), Il est douteux qu'une IDE puisse correspondre à la norme implicite.
Trivialement comparer Eclipse + Java est ridicule, car les langages dynamiques ne sont pas Java.
Pas assez.
C'est probablement insoluble. Vos exigences ("manque d'achèvements et autres actifs") rendent difficile la précision.
Les langages dynamiques ne peuvent pas avoir le même type de complétion de code que les langages statiques. C'est essentiellement impossible.
Certains IDE font un bon travail de devinettes. Eclipse, par exemple, a des plugins pour les langages dynamiques.
la source
Je pense que cette présentation de Steve Yegge est toujours d'actualité. En résumé, il y a quelques ides de script Java décents (intelliJ IDEA), mais les langages dynamiques en général sont en train de rattraper leur retard, pas parce qu'il y a quelque chose de plus difficile à rendre ces outils (ou même des langages), ce sont juste les langages statiques obtenus toute l'attention en premier.
la source
Je programme toute la journée en javascript / php et ruby travaillant sur des applications web et le meilleur IDE que j’ai trouvé pour cela est Aptana. Il a l'achèvement du code pour ces trois langues (et python), il récupère mes vars locaux et en plus, lorsque vous travaillez avec html et css, il récupère les identifiants en html pour une utilisation dans la fonction css / javascript, et récupère noms pour quand je fais quelque chose de rapide et sale et d'écrire du javascript en ligne (je sais mal, mais parfois utile pour la preuve de concept). Il a des tâches de rake intégrées et un support intégré pour git et une console de ligne de commande. Il m'a fallu un peu pour me lever, mais une fois que je l'ai fait, j'ai constaté que je ne quittais presque jamais mon IDE lors du codage, ce qui me faisait gagner beaucoup de temps.
la source
J'ai constaté que le support de Python par Wing IDE est vraiment exceptionnel. Il fait du bon travail avec l'achèvement du code et son débogueur est aussi puissant que Visual Studio pour le C # non dynamique.
Je peux attester que ce n'est pas buggy, lent ou désemparé. Je n'ai jamais utilisé Eclipse, je suis donc ignorant sur ce point, mais je pense que la plus grande question est la suivante: existe-t-il un obstacle inhérent au développement d'un IDE complet et améliorant la productivité pour les langages dynamiques? Compte tenu de mon expérience avec Python et Wing, je suis enclin à dire que ce n'est pas le cas. C'est cependant certainement plus difficile.
la source
Microsoft Visual Studio est un environnement de développement intégré utilisé par de nombreux programmeurs. Il prend en charge IronRuby , IronPython et F #. La plupart considèreraient Ruby et Python comme un langage de programmation dynamique, tandis que F # le serait moins.
En réponse au commentaire, F # est un langage de programmation.
Bien que la définition exacte de ce qui définit exactement un "langage dynamique" fasse encore l’objet d’un débat, la plupart des gens conviendraient que JavaScript est plus "dynamique" que C #, par exemple. Selon Wikipedia:
Je ne veux pas ouvrir une boîte de Pandore ici. Certains suggèrent que F # est plus correctement décrit comme un langage fonctionnel que dynamique, et je ne m'y opposerais pas. Ce que je pense serait juste de dire qu’il s’agit des différents langages .Net, F # est généralement considéré comme le plus approprié pour la programmation dynamique que le C # ou le VB.
Vous voudrez peut-être voir: Qu'est - ce qui qualifie un langage de programmation de dynamique?
la source
dynamic
intégré. Mais dans les deux cas, ni l'un ni l'autre n'est généralement typé de manière dynamique, et la plupart des autres fonctionnalités (sans parler des éléments culturels) associées aux "langages dynamiques" sont également absentes.La principale différence entre les langages à typage statique et les langages à typage dynamique réside dans le fait que le système peut savoir, avec certitude, ce que signifie une référence de symbole au moment de la compilation.
Cela facilite vraiment la collecte des informations dont vous avez besoin pour créer un bon IDE directement à partir des informations générées par le compilateur au moment de la compilation (qui est simplement déplacé vers le temps "edit" pour la plupart).
Si vous avez une signature de méthode autonome qui indique simplement que la méthode prend une "chose", comment un éditeur peut-il vous aider à savoir quoi envoyer? Comment peut-il aider à suggérer des façons d'utiliser la chose?
Duck-typing n'aide pas non plus ici - même l'éditeur le plus intelligent possible ne pourra pas vous dire que, tout simplement parce que votre objet a une méthode .executeFooOp () qu'il peut coder en complétant ".executeBarOp" sur cet objet. (Bien qu'il puisse parcourir le reste de la base de code et faire des suppositions intelligentes).
Si vous savez qu'il s'agit d'une "chaîne" dans la signature, vous connaissez toutes les méthodes que vous pouvez appeler sur cette chaîne ET vous pouvez suggérer cette variable lorsque cet utilisateur est en train de taper un appel de méthode nécessitant un Chaîne en tant que paramètre. Vous pouvez même suggérer des sous-classes dans lesquelles il pourrait être lancé si vous le souhaitez.
Les informations ne sont tout simplement pas là avec les langages à typage dynamique, sauf si vous pouvez effectuer une analyse complète de la base de code avec quelque chose de BEAUCOUP plus intelligent que votre compilateur typique.
la source
Au moins pour PHP, de nombreux IDE "comprennent" quelque chose comme
Si vous documentez de manière normalisée (dans ce cas, phpDocumentor ), l'EDI en tirera le meilleur parti.
la source
Parmi tous les IDE pour les langages dynamiques (ceux qui résolvent le type à l'exécution), le meilleur est ... Visual Studio for Python
Cela vaut la peine d'essayer.
la source