2009-02-26 14 views
28

Wie stapelt sich IronPython mit der Standard-Windows-Implementierung von Python von python.org? Wenn ich Python lerne, werde ich mit IronPython eine andere Sprache lernen und auf welche Bibliotheken würde ich verzichten?Python oder IronPython

Gibt es, alternativ, irgendwelche Vorteile für IronPython (ohne .NET IL kompilierte Klassen), die es eine Option attraktiver machen würde?

Antwort

28

Es gibt eine Reihe von wichtigen Unterschieden:

  1. Interoperabilität mit anderen .NET-Sprachen. Sie können andere .NET-Bibliotheken aus einer IronPython-Anwendung verwenden oder beispielsweise IronPython aus einer C# -Anwendung verwenden. Diese Interoperabilität nimmt mit der Hinwendung zu dynamischen Typen in .NET 4.0 zu. Für viele Details hierzu, siehe thesetwo Präsentationen auf der PDC 2008.
  2. Bessere Nebenläufigkeit/Multi-Core-Unterstützung, wegen des Fehlens einer GIL. (Beachten Sie, dass die GIL das Threading auf einer Single-Core-Maschine nicht behindert. Sie begrenzt nur die Leistung auf Multicore-Rechnern.)
  3. Begrenzte Fähigkeit, Python C-Erweiterungen zu verwenden. Das Projekt Ironclad macht erhebliche Fortschritte in Richtung Verbesserung - sie haben fast Numpy funktioniert!
  4. Weniger plattformübergreifende Unterstützung; im Grunde haben Sie die CLR und Mono. Mono ist jedoch beeindruckend und läuft auf vielen Plattformen - und sie haben eine Implementierung von Silverlight, genannt Moonlight.
  5. Berichte von verbesserter Leistung, obwohl ich das nicht sorgfältig untersucht habe.
  6. Feature-Verzögerung: Da CPython die Referenz-Python-Implementierung ist, hat es die "neuesten und besten" Python-Funktionen, während IronPython zwangsläufig hinterherhinkt. Viele Leute finden das nicht ein Problem.
6

Nun, es ist in der Regel schneller.

Kann keine Module verwenden und hat nur eine Teilmenge der Bibliothek.

Here's a list of differences.

+0

Und es gibt http://fepy.sourceforge.net/, die zusätzliche Bibliotheken durch Vermeidung von Microsoft-Lizenzierung Snafus bieten können. –

13

Es gibt einige feine Unterschiede, wie Sie Ihren Code schreiben, aber der größte Unterschied ist in den Bibliotheken, die Sie zur Verfügung haben.

Mit IronPython haben Sie alle .Net-Bibliotheken zur Verfügung, aber auf Kosten von einigen der "normalen" Python-Bibliotheken, die nicht auf die .Net VM portiert wurden denke ich.

Grundsätzlich sollten Sie erwarten, dass die Syntax und die Idiome identisch sind, aber ein für IronPython geschriebenes Skript wird nicht ausgeführt, wenn Sie versuchen, es dem "normalen" Python-Interpreter zu geben. Umgekehrt ist es wahrscheinlich wahrscheinlicher, aber auch hier werden Sie Unterschiede finden, denke ich.

0

Es hängt auch davon ab, ob Sie möchten, dass Ihr Code unter Linux funktioniert. Weiß nicht, ob IronPython auf allen anderen Windows-Plattformen funktioniert.

+1

Wenn es nach IL compiliert, dann sollte mono in der Lage sein, es auszuführen! – Peter

+1

Es läuft und ist für Mono verfügbar. –

1

Python ist Python, der einzige Unterschied ist, dass IronPython für die CLR (.NET Framework) entwickelt wurde und daher .NET-Assemblys, die in anderen .NET-Sprachen geschrieben sind, verwenden kann. Also, wenn Ihre Plattform Windows ist und Sie auch .NET oder Ihre Firma verwenden, dann sollten Sie IronPython in Betracht ziehen.

+0

Dies ist mehr für persönliche Erbauung, ich arbeite hauptsächlich im MS-Bereich, aber das bedeutet nicht unbedingt, dass ich meine eigene persönliche Entwicklung einschränken sollte. – johnc

2

Einer der Vorteile von IronPython ist, dass IronPython im Gegensatz zu CPython nicht die Global Interpreter-Sperre verwendet, wodurch Threading effektiver wird.

In der Python-Standardimplementierung greifen Threads die GIL bei jedem Objektzugriff ab. Dies begrenzt die parallele Ausführung, was besonders dann von Bedeutung ist, wenn Sie erwarten, dass Sie mehrere CPUs vollständig nutzen.

2

Siehe den Blogpost IronPython is a one-way gate. Es fasst einige Dinge zusammen, die ich über IronPython gelernt habe, indem ich Fragen zu StackOverflow gestellt habe.