IronPython - IronPython

IronPython
Ironpython-logo.png
Autori originali Jim Hugunin , Microsoft
Dezvoltatori Dino Viehland,
Fundația .NET
Eliberarea inițială 5 septembrie 2006 ; acum 15 ani ( 05.09.2006 )
Versiune stabila
2.7.11  Editați acest lucru pe Wikidata / 17 noiembrie 2020 ; Acum 11 luni ( 17 noiembrie 2020 )
Previzualizare lansare
3.4.0-alfa1 / 20 aprilie 2021 ; acum 5 luni ( 2021-04-20 )
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 .net Editați acest lucru pe Wikidata

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

Referințe

linkuri externe