2009-10-30 55 views
5

Je souhaite apprendre Python mais je travaille toute la journée sur .Net en tant que développeur C#, j'ai donc décidé de télécharger et d'installer IronPython et le studio IronPython intégré. Comment différent ou similaire de l'original Python c'est? En tant que développeur .Net, puis-je m'attendre à exécuter un script Python conventionnel dans l'environnement .Net sans problème ou c'est exactement la même vieille utopie de migration? À quoi puis-je m'attendre?Comparaison entre IronPython et Original Python. Que puis-je attendre du premier?

Merci d'avance.

EDIT: Dic. 2009 - IronPython a été mis à niveau vers la version 2.6 récemment. Veuillez mettre à jour vos réponses si c'est possible.

Répondre

3

Dans votre situation, il est parfaitement raisonnable d'étudier IronPython (d'autant plus que this book fait un excellent travail pour vous aider!). Vous aurez accès à la plupart des fonctionnalités de Python 2.5 (vous ne savez pas quand IronPython va mettre à jour vers une version 2.6 de Python, mais 2.5 est déjà utilisable), plus toutes les bibliothèques et assemblages .Net que vous connaissez et aimez, et des outils tels que les compléments Visual Studio. Les différences entre CPython et IronPython (et Jython, d'ailleurs, qui applique le même concept que IronPython à la JVM - Jim Hugunin a été l'auteur de Jython bien avant de passer à Microsoft où il a créé IronPython, les deux projets maintenant prospérer) sont principalement dans la collecte des ordures et le threading: IronPython et Jython s'appuient sur leurs plates-formes sous-jacentes (ainsi, vous obtenez la collecte de place mark-and-balayage et threading libre), CPython roule les siennes avec mark-and-sweep de temps en temps pour résoudre les boucles de référence, et threading entravé par un verrou global d'interpréteur). Un script Python bien codé ne repose pas sur les détails d'implémentation en question (il ne suppose jamais que GC se produit immédiatement, ne suppose jamais qu'une opération est atomique sous thread sauf pour quelques-uns, comme les méthodes de Queue.Queue, qui sont explicitement documenté être), mais bien sûr, il y a beaucoup de scripts dans la nature qui sont bâclés. Par exemple:

data = open('x.txt').read() 

cela laisse l'objet fichier ouvert jusqu'à ce qu'il soit collecté par la corbeille; dans un environnement de comptage de référence, la collecte se fait immédiatement (le fichier se ferme dès que possible), dans un environnement mark-and-sweep (le processus utilisant de telles constructions conserve souvent des fichiers, peut-être plusieurs fichiers, inutilement ouvert pour beaucoup plus longtemps que nécessaire, gaspillant les ressources du système & c).

Ainsi, bon codage Python est à la place:

# needed in 2.5, unneeded but innocuous in 2.6 
from __future__ import with_statement 

with open('x.txt') as f: data = f.read() 

qui garantie-t fermeture immédiate du fichier dans chaque mise en œuvre (la déclaration with est très très pratique de cette façon ;-).Cela n'affecte pas votre apprentissage de Python, ni n'empêche la réutilisation du code Python correctement codé, mais si et quand vous voulez réutiliser le code Python codé de manière désordonnée (en particulier dans un serveur de longue durée, service, etc). démon, & c) vous devrez peut-être resserrer le processus. Donc, btw, les gens qui veulent utiliser des versions plus récentes et meilleures de CPython, comme Unladen Swallow & c, une fois que ces versions implémentent de meilleurs mécanismes de récupération de place, se débarrasser du GIL, et d'autres améliorations; J'espère que cela change déjà la "culture" de la communauté Python vers un codage plus correct et moins bâclé, mais bien sûr il y a des bazillions de lignes de vieux code bâclé, donc il faut faire attention ;-).

+0

Dic. 2009: IronPython a été mis à jour à 2.6 récemment – backslash17

1

La plupart des scripts python fonctionnent parfaitement bien dans IronPython. Il s'agit d'un list of packages and modules not included in IronPython dans la dernière version.

Tant que votre script ne compte pas sur ceux-ci, il fonctionnera très probablement sans modifications. Cependant, une grande partie de la «puissance» de IronPython entre vraiment en jeu en migrant vos scripts pour utiliser des classes de framework .NET au lieu de la bibliothèque standard de python.