IronPython - IronPython
| Autori originali | Jim Hugunin , Microsoft |
|---|---|
| Dezvoltatori | Dino Viehland, Fundația .NET |
| Eliberarea inițială | 5 septembrie 2006 |
| Versiune stabila | |
| Previzualizare lansare | 3.4.0-alfa1 / 20 aprilie 2021
|
| Repertoriu | |
| Scris in | C # |
| Sistem de operare | Windows , Linux , macOS |
| Platformă | .NET Framework , .NET , Mono |
| Tip | Implementarea limbajului de programare Python |
| Licență | Licență Apache 2.0 |
| Site-ul web |
ironpython |
IronPython este o implementare a limbajului de programare Python care vizează .NET Framework și Mono . Jim Hugunin a creat proiectul și a contribuit activ la acesta până la versiunea 1.0 care a fost lansată pe 5 septembrie 2006. IronPython 2.0 a fost lansat pe 10 decembrie 2008. După versiunea 1.0 a fost întreținut de o mică echipă de la Microsoft până la versiunea 2.7 Beta 1 eliberare. Microsoft a abandonat IronPython (și proiectul său suror IronRuby ) la sfârșitul anului 2010, după care Hugunin a plecat să lucreze la Google. În prezent, proiectul este întreținut de un grup de voluntari la GitHub . Este un software gratuit și open-source și poate fi implementat cu Python Tools pentru Visual Studio, care este o extensie gratuită și open-source pentru IDE-ul Microsoft Visual Studio .
IronPython este scris în întregime în C # , deși o parte din codul său este generat automat de un generator de cod scris în Python.
IronPython este implementat deasupra Dynamic Language Runtime (DLR), o bibliotecă care rulează deasupra infrastructurii de limbă comună, care asigură tastarea dinamică și distribuirea metodelor dinamice, printre altele, pentru limbaje dinamice. DLR face parte din .NET Framework 4.0 și face parte, de asemenea, din Mono de la versiunea 2.4 din 2009. DLR poate fi, de asemenea, utilizat ca bibliotecă pentru implementările CLI mai vechi.
Stare și foaie de parcurs
- Versiunea 2.0, lansată la 10 decembrie 2008 și actualizată la 2.0.3 pe 23 octombrie 2009, vizează CPython 2.5. IronPython 2.0.3 este compatibil numai până la .NET Framework 3.5.
- Versiunea 2.6, lansată la 11 decembrie 2009 și actualizată la 12 aprilie 2010, vizează CPython 2.6. Versiunile IronPython 2.6.1 sunt compatibile binar numai cu .NET Framework 4.0. IronPython 2.6.1 trebuie să fie compilat din surse pentru a rula pe .NET Framework 3.5. IronPython 2.6.2, lansat pe 21 octombrie 2010, este binar compatibil atât cu .NET Framework 4.0, cât și cu .NET Framework 3.5.
- Versiunea 2.7 a fost lansată pe 12 martie 2011 și vizează CPython 2.7.
- Versiunea 2.7.1 a fost lansată pe 21 octombrie 2011 și vizează CPython 2.7.
- Versiunea 2.7.2.1 a fost lansată pe 13 martie 2012. Permite suport pentru bibliotecile de fișiere ZIP , SQLite și executabile compilate.
- Versiunea 2.7.4 a fost lansată pe 7 septembrie 2013.
- Versiunea 2.7.5 a fost lansată pe 6 decembrie 2014 și constă în mare parte din remedieri de erori.
- Versiunea 2.7.6 a fost lansată pe 21 august 2016 și constă doar din remedieri de erori.
- Versiunea 2.7.7 a fost lansată pe 7 decembrie 2016 și constă doar din remedieri de erori.
- Versiunea 2.7.8 a fost lansată pe 16 februarie 2018 și constă din remedieri de erori, cod reorganizat și o infrastructură de testare actualizată (inclusiv testări semnificative pe Linux sub Mono ). Este, de asemenea, prima versiune care acceptă .NET Core .
- Versiunea 2.7.9 a fost lansată pe 9 octombrie 2018 și constă din remedieri de erori, cod reorganizat. Se intenționează să fie ultima versiune înainte de IronPython 3.
- Versiunea 2.7.10 a fost lansată pe 27 aprilie 2020 și adaugă suportul .NET Core 3.1.
- Versiunea 2.7.11 a fost lansată pe 17 noiembrie 2020 și rezolvă problemele atunci când rulează pe .NET 5 .
Diferențe cu CPython
Există unele diferențe între implementarea de referință Python CPython și IronPython. Se știe că unele proiecte construite deasupra IronPython nu funcționează sub CPython. În schimb, aplicațiile CPython care depind de extensiile de limbă care sunt implementate în C nu sunt compatibile cu IronPython, cu excepția cazului în care sunt implementate într-o interoperabilitate .NET. De exemplu, NumPy a fost împachetat de Microsoft în 2011, permițând codului și bibliotecilor dependente de acesta să fie rulate direct din .NET Framework.
Silverlight
IronPython este acceptat pe Silverlight (care este depreciat de Microsoft și a pierdut deja suportul în majoritatea browserelor web, cu excepția Internet Explorer 11 care va încheia suportul pentru acesta în octombrie 2021). Poate fi folosit ca motor de scriptare în browser la fel ca motorul JavaScript . Scripturile IronPython sunt transmise ca niște scripturi JavaScript simple din partea clientului în <script>-taguri. Apoi, de asemenea, este posibil să modificați marcajul XAML încorporat .
Tehnologia din spatele acestui lucru se numește 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 fel funcționează și pentru IronRuby .
Licență
Până la versiunea 0.6, IronPython a fost lansat în condițiile licenței publice comune . După recrutarea liderului proiectului în august 2004, IronPython a fost pus la dispoziție ca parte a inițiativei Microsoft Shared Source . Această licență nu este aprobată de OSI, dar autorii susțin că respectă definiția open-source. Odată cu versiunea 2.0 alfa, licența a fost schimbată în Licența publică Microsoft , pe care OSI a aprobat-o. Cele mai recente versiuni sunt lansate în condițiile licenței Apache 2.0 .
Extensibilitatea interfeței
Unul dintre avantajele cheie ale IronPython este în funcția sa de strat de extensibilitate a cadrelor de aplicații scrise într-un limbaj .NET. Este relativ simplu să integrezi un interpret IronPython într-un cadru de aplicații .NET existent. Odată introduși, dezvoltatorii din aval pot utiliza scripturi scrise în IronPython care interacționează cu obiecte .NET din cadrul cadrului, extinzând astfel funcționalitatea din interfața cadrului, fără a fi nevoie să schimbe nici o bază de cod a cadrului.
IronPython folosește pe larg reflexia . Când este trecut într-o referință la un obiect .NET, acesta va importa automat tipurile și metodele disponibile pentru acel obiect. Acest lucru are ca rezultat o experiență extrem de intuitivă atunci când lucrați cu obiecte .NET dintr-un script IronPython.
Exemple
Următorul script IronPython manipulează obiectele .NET Framework. Acest script poate fi furnizat de un dezvoltator de aplicații terță parte client și transmis în cadrul serverului printr-o interfață. Rețineți că nici interfața, nici codul de pe server nu sunt modificate pentru a suporta analiza cerută de aplicația client.
from BookService import BookDictionary
booksWrittenByBookerPrizeWinners = [book.Title for book in BookDictionary.GetAllBooks()
if "Booker Prize" in book.Author.MajorAwards]
În acest caz, presupuneți că .NET Framework implementează o clasă, BookDictionary , într-un modul numit BookService și publică o interfață în care scripturile IronPython pot fi trimise și executate.
Acest script, atunci când este trimis la acea interfață, va itera pe întreaga listă de cărți menținută de cadrul și va alege cele scrise de autorii câștigători ai premiului Booker.
Ceea ce este interesant este că responsabilitatea pentru scrierea analizei reale revine dezvoltatorului din partea clientului. Cerințele dezvoltatorului de pe partea serverului sunt minime, oferind în esență doar acces la datele păstrate de server. Acest model de proiectare simplifică foarte mult implementarea și întreținerea cadrelor de aplicații complexe.
Următorul script folosește .NET Framework pentru a crea un mesaj simplu Hello World.
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import MessageBox
MessageBox.Show("Hello World")
Performanţă
Caracteristicile de performanță ale IronPython în comparație cu CPython , implementarea de referință a Python, depinde de etalonul exact utilizat. IronPython are performanțe mai slabe decât CPython pe majoritatea benchmark-urilor luate cu scriptul PyStone , dar mai bine pe alte benchmark-uri. IronPython poate funcționa mai bine în programele Python care utilizează fire sau nuclee multiple, deoarece are un compilator JIT și, de asemenea, pentru că nu are Global Interpreter Lock .
Vezi si
- Boo - un limbaj pentru .NET Framework și Mono cu sintaxă inspirată de Python și caracteristici împrumutate de la C # și Ruby
- Cobra
- IronScheme
- Jython - o implementare a Python pentru mașina virtuală Java
- Cython
- pypy - un interpret de auto-hosting pentru limbajul de programare Python
- Cadru Tao
- Neîncărcat Înghițiți - A (defunctul) ramură a CPython care vizează să asigure o performanță superioară , folosind un LLVM bazate pe just-in-time compilator