IronPython - IronPython

IronPython
Ironpython-logo.png
Originale forfattere Jim Hugunin , Microsoft
Utvikler (er) Dino Viehland,
.NET Foundation
Første utgivelse 5. september 2006 ; 15 år siden ( 2006-09-05 )
Stabil utgivelse
2.7.11  Rediger dette på Wikidata / 17. november 2020 ; 11 måneder siden ( 17. november 2020 )
Forhåndsvis utgivelse
3.4.0-alfa1 / 20. april 2021 ; 5 måneder siden ( 2021-04-20 )
Oppbevaringssted
Skrevet inn C#
Operativsystem Windows , Linux , macOS
Plattform .NET Framework , .NET , Mono
Type Implementering av programmeringsspråk for Python
Tillatelse Apache lisens 2.0
Nettsted ironpython .net Rediger dette på Wikidata

IronPython er en implementering av Python -programmeringsspråket rettet mot .NET Framework og Mono . Jim Hugunin opprettet prosjektet og bidro aktivt til det frem til versjon 1.0 som ble utgitt 5. september 2006. IronPython 2.0 ble utgitt 10. desember 2008. Etter versjon 1.0 ble det vedlikeholdt av et lite team hos Microsoft til 2.7 Beta 1 utgivelse. Microsoft forlot IronPython (og dets søsterprosjekt IronRuby ) i slutten av 2010, hvoretter Hugunin dro for å jobbe hos Google. Prosjektet vedlikeholdes for tiden av en gruppe frivillige på GitHub . Det er gratis og åpen kildekode-programvare, og kan implementeres med Python Tools for Visual Studio, som er en gratis og åpen kildekode-utvidelse for Microsofts Visual Studio IDE.

IronPython skrives helt i C# , selv om noen av koden automatisk genereres av en kodegenerator skrevet i Python.

IronPython er implementert på toppen av Dynamic Language Runtime (DLR), et bibliotek som kjører på toppen av Common Language Infrastructure som blant annet gir dynamisk maskinskriving og dynamisk metodeforsendelse for dynamiske språk. DLR er en del av .NET Framework 4.0 og er også en del av Mono siden versjon 2.4 fra 2009. DLR kan også brukes som et bibliotek på eldre CLI -implementeringer.

Status og veikart

  • Utgivelse 2.0, utgitt 10. desember 2008, og oppdatert som 2.0.3 23. oktober 2009, er målrettet mot CPython 2.5. IronPython 2.0.3 er bare kompatibel opp til .NET Framework 3.5.
  • Utgivelse 2.6, utgitt 11. desember 2009, og oppdatert 12. april 2010, er målrettet mot CPython 2.6. IronPython 2.6.1 -versjoner er bare binær kompatibel med .NET Framework 4.0. IronPython 2.6.1 må kompileres fra kilder for å kjøre på .NET Framework 3.5. IronPython 2.6.2, utgitt 21. oktober 2010, er binær kompatibel med både .NET Framework 4.0 og .NET Framework 3.5.
  • Utgivelse 2.7 ble utgitt 12. mars 2011, og den er målrettet mot CPython 2.7.
  • Utgivelse 2.7.1 ble utgitt 21. oktober 2011, og den er rettet mot CPython 2.7.
  • Utgivelse 2.7.2.1 ble utgitt 13. mars 2012. Den muliggjør støtte for ZIP -filformatbiblioteker , SQLite og kompilerte kjørbare filer.
  • Utgivelse 2.7.4 ble utgitt 7. september 2013.
  • Utgivelse 2.7.5 ble utgitt 6. desember 2014 og består stort sett av feilrettinger.
  • Utgivelse 2.7.6 ble utgitt 21. august 2016 og består bare av feilrettinger.
  • Utgivelse 2.7.7 ble utgitt 7. desember 2016 og består bare av feilrettinger.
  • Utgivelse 2.7.8 ble utgitt 16. februar 2018 og består av feilrettinger, omorganisert kode og en oppdatert testinfrastruktur (inkludert betydelig testing på Linux under Mono ). Det er også den første utgivelsen som støtter .NET Core .
  • Utgivelse 2.7.9 ble utgitt 9. oktober 2018 og består av feilrettinger, omorganisert kode. Det er ment å være den siste utgivelsen før IronPython 3.
  • Versjon 2.7.10 ble utgitt 27. april 2020 og legger til .NET Core 3.1 -støtte.
  • Utgivelse 2.7.11 ble utgitt 17. november 2020 og løser problemer når den kjøres på .NET 5 .

Forskjeller med CPython

Det er noen forskjeller mellom Python -referanseimplementering CPython og IronPython. Noen prosjekter bygget på toppen av IronPython er kjent for ikke å fungere under CPython. Motsatt er CPython -programmer som er avhengige av utvidelser til språket som er implementert i C, ikke kompatible med IronPython, med mindre de er implementert i en .NET interop. For eksempel ble NumPy pakket inn av Microsoft i 2011, slik at kode og biblioteker som er avhengige av den kan kjøres direkte fra .NET Framework.

Silverlight

IronPython støttes på Silverlight (som er utdatert av Microsoft og allerede har mistet støtte i de fleste nettlesere, bortsett fra Internet Explorer 11 som avslutter støtten for den i oktober 2021). Den kan brukes som en skriptmotor i nettleseren akkurat som JavaScript -motoren. IronPython -skript sendes som enkle JavaScript -skript på <script>klientsiden i -tags. Det er da også mulig å endre innebygd XAML -markup.

Teknologien bak dette kalles 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>

Det samme fungerer for IronRuby .

Tillatelse

Fram til versjon 0.6 ble IronPython utgitt under vilkårene i Common Public License . Etter rekruttering av prosjektleder i august 2004, ble IronPython gjort tilgjengelig som en del av Microsofts initiativ for delt kilde . Denne lisensen er ikke OSI -godkjent, men forfatterne hevder at den oppfyller åpen kildekode definisjon. Med 2.0 alfa -utgivelsen ble lisensen endret til Microsoft Public License , som OSI har godkjent. De siste versjonene er utgitt under vilkårene i Apache License 2.0 .

Grensesnittutvidelse

En av IronPythons viktigste fordeler er funksjonen som et utvidelseslag for applikasjonsrammer skrevet på et .NET -språk. Det er relativt enkelt å integrere en IronPython -tolk i et eksisterende .NET -applikasjonsrammeverk. Når de er på plass, kan nedstrømsutviklere bruke skript skrevet i IronPython som samhandler med .NET -objekter i rammeverket, og dermed utvide funksjonaliteten i rammeverkets grensesnitt, uten å måtte endre noen av rammeverkets kodebase.

IronPython bruker omfattende refleksjon . Når den sendes i en referanse til et .NET -objekt, vil den automatisk importere typer og metoder som er tilgjengelige for objektet. Dette resulterer i en svært intuitiv opplevelse når du arbeider med .NET -objekter fra et IronPython -skript.

Eksempler

Følgende IronPython -skript manipulerer .NET Framework -objekter. Dette skriptet kan leveres av en tredjeparts applikasjonsutvikler på klientsiden og sendes til rammen på serversiden gjennom et grensesnitt. Vær oppmerksom på at verken grensesnittet eller koden på serversiden er endret for å støtte analysen som kreves av klientprogrammet.

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

Anta i dette tilfellet at .NET Framework implementerer en klasse, BookDictionary , i en modul som heter BookService , og publiserer et grensesnitt som IronPython -skript kan sendes og kjøres til.

Dette manuset, når det sendes til det grensesnittet, vil gjenta hele listen over bøker som vedlikeholdes av rammen, og velge ut de skrevet av Booker Prize-vinnende forfattere.

Det som er interessant er at ansvaret for å skrive selve analysen ligger hos utvikleren på klientsiden. Kravene til serverutvikleren er minimale, og gir i hovedsak tilgang til dataene som serveren vedlikeholder. Dette designmønsteret forenkler distribusjonen og vedlikeholdet av komplekse applikasjonsrammer.

Følgende skript bruker .NET Framework for å lage en enkel Hello World -melding.

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

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

Opptreden

Ytelseskarakteristikkene til IronPython sammenlignet med CPython , referanseimplementeringen av Python, avhenger av den eksakte referansen som brukes. IronPython yter dårligere enn CPython på de fleste benchmarks tatt med PyStone -skriptet, men bedre på andre benchmarks. IronPython kan utføre bedre i Python -programmer som bruker tråder eller flere kjerner, ettersom den har en JIT -kompilator, og også fordi den ikke har Global Interpreter Lock .

Se også

Referanser

Eksterne linker