Question

Je souhaite boire du koolaid dans un langage dynamique moderne. J'ai donc cru tout le contenu du blog et des podcasts de Michael Foord. J'ai acheté son livre (et en ai lu une partie) et j'ai ajouté un IPy intégré. Il y a environ un an, vous avez exécuté une grande application existante (bien que ce soit pour quelqu'un d'autre et que je ne l'utilisais pas vraiment moi-même).

Maintenant, je dois faire quelques choses assez simples pour la génération de code, dans lesquelles je vais appeler quelques méthodes sur quelques objets .net (objets personnalisés, avec des droits d'auteur C #), créer quelques chaînes, écrire des fichiers, etc. .

Après avoir essayé cela, je me sens comme un petit garçon qui se croit le seul à pouvoir voir que l’empereur n’est pas habillé. Si vous utilisez IronPython, j'aimerais vraiment savoir comment vous en traitez avec les aspects suivants:

  • Édition de code - utilisez-vous le framework .NET sans Intellisense?
  • Refactoring - Je sais qu’une partie du travail de refactoring consiste à travailler autour du travail lié à la langue. Par conséquent, si Python est suffisamment léger, nous n’en aurons pas besoin. Cependant, des modifications telles que le changement de nom me semblent essentielles pour améliorer la qualité code indépendamment de la langue.
  • Temps de démarrage insatisfaisant - Une des choses supposées être bonnes pour les langages interprétés est le manque de temps de compilation menant à un développement interactif rapide. Malheureusement, je peux compiler une application C # et la lancer plus rapidement qu’IPy ne peut démarrer.
  • Piratage interactif - la console IPy / répl est supposée être utile à cela, mais je n’ai pas trouvé le moyen de prendre le code auquel vous êtes arrivé de manière interactive et de le conserver dans un fichier - copier-coller depuis le la console est assez misérable. Et la console semble contenir des références aux assemblys .NET que vous avez importés. Vous devez donc le quitter et le redémarrer si vous travaillez également sur C #. Hacking sur C # dans quelque chose comme LinqPad semble un moyen beaucoup plus rapide et plus facile d'essayer des choses (et possède le propre Intellisense). Utilisez-vous la console?
  • Débogage - quelle est l'histoire ici? Je sais qu'un membre de l'équipe IPy travaille sur un projet de passe-temps en ligne de commande, mais disons simplement que je ne suis pas immédiatement attiré par un débogueur en ligne de commande. Je n'ai pas vraiment besoin d'un débogueur à partir de petits scripts Python, mais je le ferais si j'utilisais IPy pour les tests unitaires de script, par exemple.
  • Test unitaire - Je peux voir que les langages dynamiques peuvent être intéressants pour cela, mais existe-t-il une intégration IDE test-coureur (comme pour Resharper, etc.). Le livre de Foord contient un chapitre sur ce sujet, ce qui, je l’admets, n’a pas encore été lu correctement, mais il semble impliquer la conduite d’un testeur en mode console à partir de la ligne de commande, ce qui semble être un énorme pas en arrière par rapport à un testeur intégré tel que TestDriven.net ou Resharper.

Je veux vraiment croire en ce genre de choses, alors je pars toujours de l'hypothèse que j'ai raté quelque chose. J'aimerais vraiment savoir comment les autres personnes gèrent IPy, en particulier si elles le font de manière à ne pas avoir l'impression que nous venons de perdre 15 ans de développement d'outils.

Mise à jour: (juillet 2010) Cette question a l'air assez dépassée, maintenant qu'il existe à la fois des Outils IronPython officiels pour VS et PyCharm , qui sont très prometteurs et dont rien n'était à l'époque où je l'ai écrit. Merci à tous ceux qui ont répondu. Pour ceux d’entre vous qui sont heureux sans outils de refactoring automatiques, puis-je vous recommander de ne jamais utiliser un IDE avec un bon refactoring automatique? Une fois que vous avez terminé, vous vous demanderez pourquoi vous avez toujours pensé que vous étiez toujours heureux de trouver / remplacer, et vous ne voudrez plus jamais vous en passer. Si rien d'autre, la possibilité de renommer instantanément des identifiants sans se soucier de remplacer le mauvais texte modifie toute votre approche en matière de nommage.

Était-ce utile?

La solution

do you use the .NET framework without Intellisense?

Oui. J'utilise uniquement emacs avec IronPython. " M - / " est assez bon pour moi. Je passe parfois à Reflector et MSDN lorsque j'ai vraiment besoin d'informations sur le SDK.

Refactoring

Vous voulez en fait dire "Refactoring automatique". quand vous avez dit "Refactoring". Je fais beaucoup de refactoring en codant. Cela pourrait être mieux avec une automatisation. Mais je vais bien avec la refactorisation manuelle. Cela me force également à inclure plus de tests. Je n'ai jamais utilisé d'IDE avec une fonctionnalité de refactoring de manière intensive, c'est peut-être pour cette raison Je ne souffre pas. La recherche et le remplacement simples me conviennent parfaitement.

Crippling startup time

Oui, c’est ma douleur majeure, même si je travaille sur un quad-core 3GHz avec 4G Ram, 509 sont nécessaires pour exécuter 359 tests. La moitié de ce temps (25s) est le temps de démarrage !! Il semble qu'IronPython effectue une tâche de traitement très lourde lors de l'importation d'un module volumineux. Je prévois maintenant de cracher mes tests en plusieurs parties pour atténuer cette douleur.

Interactive hacking - Do you use the console?

J'utilise la console de temps en temps, lorsque je veux essayer une idée ad hoc. Ne pas avoir de problème avec ça. La plupart du temps, cependant, j’écris ma pensée en test unitaire.

Debugging - what's the story here?

Si le débogage signifie un point d'arrêt et une inspection variable. J'utilise uniquement les déclarations d'impression pour ce genre de choses. Le type d'application sur lequel je travaille est sur le point de vivre et d'être maintenu pendant au moins une décennie. Pour gérer le code défectueux, je ne parie que sur 3 choses: le code compréhensible, le test unitaire et la journalisation étendue.

Unit testing

Je ne m'approche jamais d'un outil que vous mentionnez. Utilisez juste unittest.TextTestRunner. À part le temps de démarrage horrible, je ne me plains pas.

** MIS À JOUR **

Je viens de terminer la mise à niveau vers IPy 2.6B1 avec un résultat phénoménal. Le temps de démarrage est passé de 25 à 6 et mon temps de test global de 50 à 16 !!!

incroyable!

Autres conseils

Qu'en est-il des outils IronPython pour Visual Studio 2010?

Les outils IronPython fournissent un éditeur de code Python, un système de projet basé sur des fichiers et un Interpréteur Python, tous à l'intérieur de Visual Studio 2010, et tous gratuitement. http://ironpython.net/tools/

Je pense que ce complément couvrirait la plupart de vos points.

J'espère que ça aide,

Patrick

IronPython est une excellente solution, mais je reviens toujours à CPython pour Windows. Pourquoi?

D'après mon expérience, CPython sous Windows, Mac OS / X et * NIX sont pratiquement les mêmes. Je peux utiliser presque toutes les "batteries". dans chaque environnement. Je développe fréquemment des applications sur Linux et les expédie sur des serveurs Windows. Quelques problèmes avec le filetage mis à part, je n'ai eu aucun problème.

IronPython, en revanche, est un wrapper de langage Python autour du .Net Framework. Je trouve cela beaucoup plus agréable à utiliser que C #, mais c'est à peu près tout. Mes programmes CPython ne fonctionnent pas sans un travail considérable. Les piles pour IronPython sont différentes.

Si votre objectif est d’être productif sur .Net, IPy est probablement OK. Toutefois, si vous recherchez des compétences Python portables, je les éviterais.

J'utilise PyDev pour écrire du code IronPython. J'essaie de séparer le plus possible le code spécifique à .NET afin de pouvoir exécuter les scripts (Iron) Python à partir de PyDev. Grâce à PyDev, je peux utiliser Pylint, disponible à l'adresse http://www.logilab.org/857. Les versions récentes de PyDev permettent de configurer l’interprète même par fichier ou par projet. Je peux donc facilement passer des interprètes d’IronPython à CPython et vice versa. De cette manière, je peux voir que mon code est portable entre les implémentations Python. (Bien que je n’utilise pas, Jython 2.5 RC peut aussi être utilisé dans PyDev.)

Ayant du code compatible Python et IronPython 2.5, je peux utiliser le refactoring dans PyDev, voir http: // pydev .sourceforge.net / refactoring.html .

IronPython Studio serait un bon choix s'il prend en charge IronPython 2.x, mais malheureusement, il ne le fait pas.

PyDev, Wing, PyCharm et IronPython Tools pour Visual Studio prennent tous en charge intellisense pour .NET sous IronPython. J'ai le sentiment que SharpDevelop a aussi intellisense pour IronPython.

Le temps de démarrage s’est considérablement amélioré sous IronPython 2.6 et à nouveau sous 2.7. Il est cependant toujours beaucoup plus lent que CPython.

Le réparateur de vélo et la corde sont deux outils de refactoring automatisés populaires pour Python. Je n'ai jamais trouvé besoin de l'un d'eux.

pdb (le débogueur de bibliothèque standard Python) fonctionne avec IronPython. PyDev, SharpDevelop et IronPython Tools pour Visual Studio prennent tous en charge le débogage pour IronPython.

J'ai utilisé des outils de test intégrés (Wing dispose d'un bon support unittest. SharpDevelop prend en charge unittest et unittest2 pour IronPython, PyDev et PyCharm ont probablement également une bonne intégration unittest). Je préfère exécuter mes tests à partir de la ligne de commande. unittest2 est idéal pour cela car il évite d'avoir à écrire votre propre collection de tests / code en cours d'exécution.

J'utilise beaucoup l'interprète interactif pour les expériences et parfois comme coquille gonflée.

J’ai utilisé IronPython (et le DLR en général) de manière intensive dans mes projets récemment pour diverses choses. Quelques exemples:

  • J'ai créé un générateur de documents basé sur des modèles, qui utilise des scripts py pour créer et transformer les variables de contexte transmises au rendu de modèle (Excel, Word, html- & pdf)
  • .
  • En tant qu'évaluateur d'expression pour un moteur de règles spécialisé. Les scripts sont enregistrés dans une colonne d'une table de base de données et évalués au moment de l'exécution pour déterminer la règle applicable.
  • En tant qu'étapes dans un moteur ETL. En gros, certains composants peuvent lire des fichiers Excel et j'utilise des scripts python pour transformer les données et créer des entités NHibernate afin de remplir une base de données.
  • Scripts de configuration dynamique pour les composants C #.
  • Un moteur de calcul pour certains indicateurs devant être créés à partir d'un grand ensemble de données. Je combine les extensions Parallel avec des scripts précompilés, les performances sont bonnes jusqu'à présent.

Des choses comme ça. Une fois que le moteur est correctement configuré, avec les chemins et les références définis, vous pouvez utiliser un script pour à peu près tout.

Presque toutes ces choses tournent dans les applications asp.net mvc, et jusqu’à présent, tout va bien. J'ai découvert que ScriptEngine et certains composants tels que ScriptScope sont sécurisés pour les threads. Par conséquent, je peux même partager un moteur configuré stocké dans un conteneur IoC (par exemple, Windsor) entre des contrôleurs et autres.

En ce qui concerne un éditeur, je EditPlus la plupart du temps. L'éditeur python de VS 2010 a tendance à être un peu instable bien que l'édition rapide ne pose pas de problème.

Mon utilisation d'IronPython s'est limitée à la création de prototypes rapides, alors je ne peux pas en dire trop à ce sujet. Toutefois, si vous recherchez un environnement de développement intégré spécifique à IronPython, IronPython Studio est passable. Cela vous donnera certaines fonctionnalités d’Intellisense, bien qu’elles soient parfois un peu floconneuses. Ne fermez donc pas cette fenêtre de documentation MSDN pour le moment. Cela vous permettra de déboguer de manière interactive comme n'importe quel autre projet .Net. En outre, il prend en charge le concepteur de formulaires Visual Studio 2008 si vous préférez créer votre interface graphique de cette façon. Je ne l'ai pas essayé, mais il peut également prendre en charge l'exécution de tests nUnit à l'aide de TestDriven.net.

Malheureusement, les renommage et autres fonctionnalités de refactoring proposés par VS 2008 ne semblent pas pris en charge.

J'utilise IPy dans un environnement intégré pour exécuter des scripts de test.

1 & amp; 2. Vous avez raison, il n’ya pas beaucoup de support pour l’édition ou le refactoring de code - un support approprié de Visual Studio serait formidable.

Ignorer votre troisième point - interprété vs compilé est un argument séculaire.

N'ayant pas encore fait beaucoup de piratage interactif, je ne peux donc pas faire de commentaire sur le quatrième point.

J'utilise le débogueur Visual Studio pour déboguer mes scripts IPy.

Je ne connais pas non plus l'intégration IDE de test unitaire.

J'exécute une série de simulations de blackjack sur Python 2.6 par rapport à IronPython 2.6, en dépit du battage médiatique, IronPython semble être un peu plus lent (peut-être d'environ 10%?). Le code est très simple, juste comme :

def highcount(hand):
  total=0
  for c in hand:
    if c[1]==11 and 11+total>21:
      total+=1
    else:
      total+=c[1]
  return total

et

def dmove():
  if ( (dhand[0][1]==11 and dhand[1][1]==10) or 
       (dhand[0][1]==10 and dhand[1][1]==11) ):
    return 21 # should return blackjack

  while 1:
    lc=lowcount(dhand)
    hc=highcount(dhand)
    if lc>21: return lc # dealer busts
    if lc>=17: return hc # stand on soft 17
    if hc>=17: return hc # stand on hard 17
    dhand.append(deck.pop()) # hit otherwise

Si les optimisations de la machine virtuelle .NET sont similaires à celles du point chaud de la machine virtuelle, il est tout à fait possible que, sur de plus longues périodes, IronPython exécute la simulation plus rapidement.

Un autre point important à noter est que la simulation de blackjack se prête facilement à la génération de plusieurs threads, ce que GIL de CPython rend totalement inutile en termes d’augmentation de la vitesse. Avec IronPython, je reçois une accélération totale de 400% sur un quadcore, ce qui est vraiment très cool.

Le code n'utilise aucune fonctionnalité ésotérique Python (ce qui est une bonne chose), ce qui signifie qu'il s'exécutait à 100% sans modification sur IronPython.

J'utilise Iron Python, pas de manière professionnelle, malheureusement, mais comme langage de développement rapide pour mes projets personnels.

Python est un très bon langage pour la facilité d’utilisation, la brièveté mais la lisibilité du code et la simplicité. Cela tient en partie au fait qu’il s’agit d’un langage dynamique, mais également à sa syntaxe de base.

Je ne suis cependant pas un gourou de cpython, et je peux tirer tellement mieux de Iron Python que de cpython car je peux facilement tirer parti de la plate-forme .NET, sur laquelle je suis bien plus chez moi. Je suis déçu qu'il n'y ait actuellement aucun port pour les bibliothèques Twisted dans cpython, les seules bibliothèques Python étendues avec lesquelles je suis à l'aise, car elles seraient si utiles dans .NET.

J'utilise également la fenêtre interactive uniquement pour tester les structures .NET lorsque je code en C #.

Je viens d’acheter le livre de Foord, je ne l’apprends qu’à présent. J'espère vraiment pouvoir l'utiliser pour le développement Web, mais malheureusement, je dois attendre qu'elle soit prise en charge par asp.net mvc. Je prévois également de l'utiliser comme outil de script pour les systèmes Windows, car je peux utiliser le framework .net

Au travail, nous utilisons IronPython par rapport au modèle d'objet SharePoint. Il convient parfaitement à de nombreux petits programmes plus volumineux qu’un script PowerShell, mais n’a pas besoin de quelque chose qui doit être déployé comme artefact dans SharePoint. Il est idéal pour le prototypage rapide sur des serveurs sur lesquels Visual Studio n'est pas installé. Nous utilisons généralement Notepad ++ comme éditeur de choix.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top