Autor(es) original(es) | Jim Hugunin , Microsoft |
---|---|
Desarrollador(es) | Dino Viehland, Fundación .NET |
Lanzamiento inicial | 5 de septiembre de 2006 ( 5 de septiembre de 2006 ) | [1]
Versión estable | 3.4.1 / 12 de julio de 2023 ( 12 de julio de 2023 ) |
Versión preliminar | 3.4.0-beta1 / 30 de abril de 2022 ( 30/04/2022 ) |
Repositorio |
|
Escrito en | DO# |
Sistema operativo | Windows , Linux , macOS |
Plataforma | Marco .NET , .NET , Mono |
Tipo | Implementación del lenguaje de programación Python |
Licencia | Licencia Apache 2.0 |
Sitio web | ironpython.net |
IronPython es una implementación del lenguaje de programación Python que apunta a los frameworks .NET y Mono . El proyecto actualmente es mantenido por un grupo de voluntarios en GitHub . Es un software gratuito y de código abierto, y se puede implementar con Python Tools for Visual Studio, que es una extensión gratuita y de código abierto para el IDE Visual Studio de Microsoft . [2] [3]
IronPython está escrito completamente en C# , aunque parte de su código se genera automáticamente mediante un generador de código escrito en Python.
IronPython se implementa sobre Dynamic Language Runtime (DLR), una biblioteca que se ejecuta sobre Common Language Infrastructure y que proporciona tipado dinámico y envío dinámico de métodos, entre otras cosas, para lenguajes dinámicos. [4] DLR es parte de .NET Framework 4.0 y también es parte de Mono desde la versión 2.4 de 2009. [5] DLR también se puede utilizar como biblioteca en implementaciones de CLI más antiguas.
Jim Hugunin creó el proyecto y contribuyó activamente a él hasta la versión 1.0, que se lanzó el 5 de septiembre de 2006. [6] IronPython 2.0 se lanzó el 10 de diciembre de 2008. [7] Después de la versión 1.0, fue mantenido por un pequeño equipo en Microsoft hasta el lanzamiento de la versión 2.7 Beta 1. Microsoft abandonó IronPython (y su proyecto hermano IronRuby ) a fines de 2010, después de lo cual Hugunin se fue a trabajar a Google. [8] El proyecto actualmente es mantenido por un grupo de voluntarios en GitHub .
Esta sección necesita ser ampliada . Puedes ayudar agregándole algo. ( Julio 2012 ) |
Existen algunas diferencias entre la implementación de referencia de Python CPython e IronPython. [23] Se sabe que algunos proyectos creados sobre IronPython no funcionan con CPython. [24] Por el contrario, las aplicaciones CPython que dependen de extensiones del lenguaje que se implementan en C no son compatibles con IronPython, [25] a menos que se implementen en una interoperabilidad .NET. Por ejemplo, NumPy fue encapsulado por Microsoft en 2011, lo que permite que el código y las bibliotecas que dependen de él se ejecuten directamente desde .NET Framework. [26]
IronPython es compatible con Silverlight (que Microsoft ha dejado de utilizar y ya no es compatible con la mayoría de los navegadores web [27] ). Se puede utilizar como motor de scripts en el navegador, al igual que el motor de JavaScript . [28] Los scripts de IronPython se pasan como simples scripts de JavaScript del lado del cliente en <script>
etiquetas -tags. También es posible modificar el marcado XAML integrado .
La tecnología detrás de esto se llama Gestalt. [ cita requerida ]
// Script de inicialización de DLR. < script src = "http://gestalt.ironpython.net/dlr-latest.js" type = "text/javascript" ></ script >// Script del lado del cliente pasado a IronPython y Silverlight.< script type = " text /python" > ventana.Alert ( " Hola desde Python " ) </script>
Lo mismo funciona para IronRuby .
Hasta la versión 0.6, IronPython se publicó bajo los términos de la Licencia Pública Común . [29] Tras la contratación del líder del proyecto en agosto de 2004, IronPython se puso a disposición como parte de la iniciativa de código compartido de Microsoft . Esta licencia no está aprobada por OSI , pero los autores afirman que cumple con la definición de código abierto. [30] Con la versión alfa 2.0, la licencia se cambió a la Licencia Pública de Microsoft , [31] que la OSI ha aprobado. Las últimas versiones se publican bajo los términos de la Licencia Apache 2.0 .
Una de las principales ventajas de IronPython es su función como capa de extensibilidad para los marcos de aplicación escritos en lenguaje .NET. Es relativamente sencillo integrar un intérprete de IronPython en un marco de aplicación .NET existente. Una vez instalado, los desarrolladores posteriores pueden utilizar scripts escritos en IronPython que interactúen con objetos .NET en el marco, ampliando así la funcionalidad en la interfaz del marco, sin tener que cambiar ninguna base de código del marco. [32]
IronPython hace un uso extensivo de la reflexión . Cuando se pasa una referencia a un objeto .NET, importará automáticamente los tipos y métodos disponibles para ese objeto. Esto da como resultado una experiencia altamente intuitiva al trabajar con objetos .NET desde un script de IronPython.
El siguiente script de IronPython manipula objetos de .NET Framework. Este script puede ser suministrado por un desarrollador de aplicaciones del lado del cliente externo y puede pasarse al marco del lado del servidor a través de una interfaz. Tenga en cuenta que ni la interfaz ni el código del lado del servidor se modifican para admitir los análisis requeridos por la aplicación cliente.
Desde BookService importar BookDictionary booksWrittenByBookerPrizeWinners = [ book . Título del libro en BookDictionary . GetAllBooks () si "Booker Prize" está en book . Author . MajorAwards ]
En este caso, supongamos que .NET Framework implementa una clase, BookDictionary , en un módulo llamado BookService , y publica una interfaz en la que se pueden enviar y ejecutar scripts de IronPython.
Este script, cuando se envía a esa interfaz, iterará sobre toda la lista de libros mantenida por el marco y seleccionará aquellos escritos por autores ganadores del Premio Booker.
Lo interesante es que la responsabilidad de escribir los análisis reales recae en el desarrollador del lado del cliente. Las exigencias del desarrollador del lado del servidor son mínimas, y básicamente solo proporcionan acceso a los datos que mantiene el servidor. Este patrón de diseño simplifica enormemente la implementación y el mantenimiento de marcos de aplicaciones complejos.
El siguiente script utiliza .NET Framework para crear un mensaje simple de Hola Mundo.
importar clr clr .AddReference ( "System.Windows.Forms " )de System.Windows.Forms import MessageBox MessageBox . Show ( "Hola mundo" )
Las características de rendimiento de IronPython en comparación con CPython , la implementación de referencia de Python, dependen del punto de referencia exacto utilizado. IronPython tiene un peor rendimiento que CPython en la mayoría de los puntos de referencia tomados con el script PyStone , pero mejor en otros puntos de referencia. [33] IronPython puede tener un mejor rendimiento en programas Python que usan subprocesos o múltiples núcleos, ya que tiene un compilador JIT y también porque no tiene el Global Interpreter Lock . [34] [35]
IronPython no tiene GIL y el código multiproceso puede utilizar procesadores multinúcleo.