IronPython - IronPython

IronPython
Ironpython-logo.png
Auteur(s) original(aux) Jim Hugunin , Microsoft
Développeur(s) Dino Viehland,
Fondation .NET
Première version 5 septembre 2006 ; il y a 15 ans ( 2006-09-05 )
Version stable
2.7.11  Modifiez ceci sur Wikidata / 17 novembre 2020 ; il y a 11 mois ( 17 novembre 2020 )
Version préliminaire
3.4.0-alpha1 / 20 avril 2021 ; il y a 5 mois ( 2021-04-20 )
Dépôt
Écrit en C#
Système opérateur Windows , Linux , macOS
Plate-forme .NET Framework , .NET , Mono
Taper Langage de programmation Python mise en œuvre
Licence Licence Apache 2.0
Site Internet IronPython .net Modifiez ceci sur Wikidata

IronPython est une implémentation du langage de programmation Python ciblant le .NET Framework et Mono . Jim Hugunin a créé le projet et y a activement contribué jusqu'à la version 1.0 qui a été publiée le 5 septembre 2006. IronPython 2.0 a été publié le 10 décembre 2008. Après la version 1.0, il a été maintenu par une petite équipe de Microsoft jusqu'à la 2.7 Beta 1 Libération. Microsoft a abandonné IronPython (et son projet frère IronRuby ) fin 2010, après quoi Hugunin est parti travailler chez Google. Le projet est actuellement maintenu par un groupe de bénévoles de GitHub . C'est un logiciel gratuit et open source, et peut être implémenté avec Python Tools pour Visual Studio, qui est une extension gratuite et open source pour l' IDE Visual Studio de Microsoft .

IronPython est entièrement écrit en C# , bien qu'une partie de son code soit automatiquement généré par un générateur de code écrit en Python.

IronPython est implémenté au-dessus de Dynamic Language Runtime (DLR), une bibliothèque fonctionnant au-dessus de Common Language Infrastructure qui fournit un typage dynamique et une distribution de méthode dynamique, entre autres, pour les langages dynamiques. Le DLR fait partie du .NET Framework 4.0 et fait également partie de Mono depuis la version 2.4 de 2009. Le DLR peut également être utilisé comme bibliothèque sur les anciennes implémentations CLI.

Statut et feuille de route

  • La version 2.0, publiée le 10 décembre 2008 et mise à jour en tant que 2.0.3 le 23 octobre 2009, cible CPython 2.5. IronPython 2.0.3 n'est compatible que jusqu'à .NET Framework 3.5.
  • La version 2.6, publiée le 11 décembre 2009 et mise à jour le 12 avril 2010, cible CPython 2.6. Les versions d'IronPython 2.6.1 sont binairement compatibles uniquement avec .NET Framework 4.0. IronPython 2.6.1 doit être compilé à partir des sources pour s'exécuter sur .NET Framework 3.5. IronPython 2.6.2, publié le 21 octobre 2010, est binairement compatible avec .NET Framework 4.0 et .NET Framework 3.5.
  • La version 2.7 a été publiée le 12 mars 2011 et cible CPython 2.7.
  • La version 2.7.1 a été publiée le 21 octobre 2011 et cible CPython 2.7.
  • La version 2.7.2.1 a été publiée le 13 mars 2012. Elle permet la prise en charge des bibliothèques de format de fichier ZIP , SQLite et des exécutables compilés.
  • La version 2.7.4 a été publiée le 7 septembre 2013.
  • La version 2.7.5 a été publiée le 6 décembre 2014 et consiste principalement en des corrections de bogues.
  • La version 2.7.6 a été publiée le 21 août 2016 et ne contient que des corrections de bogues.
  • La version 2.7.7 a été publiée le 7 décembre 2016 et ne contient que des corrections de bogues.
  • La version 2.7.8 a été publiée le 16 février 2018 et comprend des corrections de bogues, un code réorganisé et une infrastructure de test mise à jour (y compris des tests importants sur Linux sous Mono ). C'est également la première version à prendre en charge .NET Core .
  • La version 2.7.9 a été publiée le 9 octobre 2018 et comprend des corrections de bogues et un code réorganisé. Il s'agit de la dernière version avant IronPython 3.
  • La version 2.7.10 a été publiée le 27 avril 2020 et ajoute la prise en charge de .NET Core 3.1.
  • La version 2.7.11 a été publiée le 17 novembre 2020 et résout les problèmes lors de l'exécution sur .NET 5 .

Différences avec CPython

Il existe quelques différences entre l'implémentation de référence Python CPython et IronPython. Certains projets construits sur IronPython sont connus pour ne pas fonctionner sous CPython. Inversement, les applications CPython qui dépendent d'extensions du langage implémentées en C ne sont pas compatibles avec IronPython , à moins qu'elles ne soient implémentées dans un interop .NET. Par exemple, NumPy a été encapsulé par Microsoft en 2011, permettant au code et aux bibliothèques qui en dépendent d'être exécutés directement à partir de .NET Framework.

Silverlight

IronPython est pris en charge sur Silverlight (qui est obsolète par Microsoft et a déjà perdu la prise en charge de la plupart des navigateurs Web, à l'exception d'Internet Explorer 11 qui mettra fin à sa prise en charge en octobre 2021). Il peut être utilisé comme moteur de script dans le navigateur tout comme le moteur JavaScript . Les scripts IronPython sont transmis comme de simples scripts JavaScript côté client dans <script>-tags. Il est alors également possible de modifier le balisage XAML intégré .

La technologie derrière cela s'appelle la Gestalt.

// DLR initialization script.
<script src="http://gestalt.ironpython.net/dlr-latest.js" type="text/javascript"></script>

// Client-side script passed to IronPython and Silverlight.
<script type="text/python">
    window.Alert("Hello from Python")
</script>

La même chose fonctionne pour IronRuby .

Licence

Jusqu'à la version 0.6, IronPython était publié sous les termes de Common Public License . Suite au recrutement du chef de projet en août 2004, IronPython a été rendu disponible dans le cadre de l' initiative Shared Source de Microsoft . Cette licence n'est pas approuvée par l' OSI mais les auteurs affirment qu'elle répond à la définition open source. Avec la version 2.0 alpha, la licence a été remplacée par la licence publique Microsoft , que l'OSI a approuvée. Les dernières versions sont publiées sous les termes de la licence Apache 2.0 .

Extensibilité de l'interface

L'un des principaux avantages d'IronPython réside dans sa fonction de couche d'extensibilité pour les frameworks d'application écrits dans un langage .NET. Il est relativement simple d'intégrer un interpréteur IronPython dans un framework d'application .NET existant. Une fois en place, les développeurs en aval peuvent utiliser des scripts écrits en IronPython qui interagissent avec les objets .NET du framework, étendant ainsi les fonctionnalités de l'interface du framework, sans avoir à modifier la base de code du framework.

IronPython fait un usage intensif de la réflexion . Lorsqu'il est passé dans une référence à un objet .NET, il importera automatiquement les types et les méthodes disponibles pour cet objet. Cela se traduit par une expérience très intuitive lorsque vous travaillez avec des objets .NET à partir d'un script IronPython.

Exemples

Le script IronPython suivant manipule les objets .NET Framework. Ce script peut être fourni par un développeur d'applications côté client tiers et transmis au framework côté serveur via une interface. Notez que ni l'interface, ni le code côté serveur ne sont modifiés pour prendre en charge les analyses requises par l'application cliente.

from BookService import BookDictionary
 
booksWrittenByBookerPrizeWinners = [book.Title for book in BookDictionary.GetAllBooks() 
                                    if "Booker Prize" in book.Author.MajorAwards]

Dans ce cas, supposons que le .NET Framework implémente une classe, BookDictionary , dans un module appelé BookService , et publie une interface dans laquelle les scripts IronPython peuvent être envoyés et exécutés.

Ce script, lorsqu'il est envoyé à cette interface, parcourra toute la liste des livres maintenus par le framework et sélectionnera ceux écrits par les auteurs lauréats du Booker Prize.

Ce qui est intéressant, c'est que la responsabilité d'écrire les analyses réelles incombe au développeur côté client. Les exigences du développeur côté serveur sont minimes, fournissant essentiellement un accès aux données gérées par le serveur. Ce modèle de conception simplifie grandement le déploiement et la maintenance de frameworks d'applications complexes.

Le script suivant utilise le .NET Framework pour créer un simple message Hello World.

import clr
clr.AddReference("System.Windows.Forms")

from System.Windows.Forms import MessageBox
MessageBox.Show("Hello World")

Performance

Les caractéristiques de performances d'IronPython par rapport à CPython , l'implémentation de référence de Python, dépendent du benchmark exact utilisé. IronPython fonctionne moins bien que CPython sur la plupart des benchmarks pris avec le script PyStone mais mieux sur d'autres benchmarks. IronPython peut mieux fonctionner dans les programmes Python qui utilisent des threads ou plusieurs cœurs, car il possède un compilateur JIT , et aussi parce qu'il n'a pas le Global Interpreter Lock .

Voir également

Les références

Liens externes