Skip to main content

Comparaison entre IronPython et cPython

Il existe quelques petites différences et incompatibilités entre IronPython et Python "standard" ("cPython"). Certaines sont des erreurs directes dans IronPython et devraient être supprimées dans les futures versions. Cependant, d'autres sont considérés comme des "détails de mise en œuvre" et resteront. Certains d'entre eux sont des sujets très difficiles.

La différence la plus évidente pour les utilisateurs est la gestion des chaînes. Le cPython d'origine a deux types de chaînes différents pour les "chaînes d'octets" et les "chaînes Unicode". Ce concept est similaire aux types de données STRING et WSTRING dans CEI. IronPython utilise simplement des chaînes .NET qui sont toujours compatibles Unicode et utilisent UTF-16 en interne. Cependant, IronPython implémente une astuce pour masquer la différence avec cPython au programmeur. (Intéressant : pour la nouvelle version 3 de Python, les développeurs ont complètement retravaillé leur gestion des chaînes. Le résultat était un modèle beaucoup plus proche d'IronPython. Les chaînes Unicode sont toujours utilisées après cela et il existe un type de données distinct pour la gestion des octets bruts)

Les modules Python écrits en C ne peuvent pas être importés dans IronPython car cPython utilise des structures de données internes complètement différentes d'IronPython. La plupart des modules de bibliothèque standard ont été réimplémentés dans IronPython. Cependant, certains modules (tels que l'interface TK) ne sont pas disponibles tant qu'ils ne sont pas explicitement portés sur IronPython. D'autre part, IronPython permet d'accéder aux assemblages .NET, y compris le framework .NET (comme indiqué ci-dessus), ce qui compense largement cette fonctionnalité.

Alors que cPython utilise le comptage de références et un ramasse-miettes déterministe pour nettoyer les déchets cycliques, IronPython s'appuie sur le ramasse-miettes .NET non déterministe. Dans la plupart des cas, cette différence n'a pas d'importance. Mais lorsque vous ouvrez des fichiers ou d'autres ressources à partir de la bibliothèque standard Python ou du framework .NET, vous devez vous assurer de les fermer ultérieurement. Il est préférable d'utiliser le with instruction avec le gestionnaire de contexte Python ou .NET IDisposable instances.

Pour plus d'informations, consultez : Gestionnaires de contenu et .NET IDisposable