Ironpython Und Die Dynamic Language Runtime (DLR) Softwareentwicklung Mit Python Auf Der Microsoft Windows Plattform
Total Page:16
File Type:pdf, Size:1020Kb
IronPython und die Dynamic Language Runtime (DLR) Softwareentwicklung mit Python auf der Microsoft Windows Plattform Klaus Rohe ([email protected]) Microsoft Deutschland GmbH Einige Anmerkungen • Kein Python Tutorial: • Es werden einige Unterschiede von Python zu C# / Java dargestellt • Die Eigenschaften, Beispiele und Demos beziehen sich auf die Version IronPython 2.0 Beta 4. Die endgültig freigegebene Version von IronPython 2.0 kann andere Eigenschaften besitzen und sich anders verhalten. Herbstcampus 2008 – Titel des Vortrags 2 Agenda • Python • IronPython & die Dynamic Language Runtime • Benutzung von .NET Bibliotheken in IronPython • ADO.NET • WPF • Einbetten von IronPython in Applikationen • Interoperabilität • IronPython & Cpython • Interoperabilität CPython - .NET Herbstcampus 2008 – Titel des Vortrags 3 Historie von Python • Anfang der 1990er Jahre von Guido van Rossum am Zentrum für Mathematik und Informatik Amsterdam als Nachfolger für die Lehrsprache ABC entwickelt • Wurde ursprünglich für das verteilte Betriebssystem Amoeba entwickelt: http://www.cs.vu.nl/pub/amoeba/ • Der Name der Sprache bezieht sich auf die britische Komiker Gruppe Monty Python Herbstcampus 2008 – Titel des Vortrags 4 Charakterisierung von Python (1) • Python-Programm wird interpretiert • Unterstützt mehrere Programmierparadigmen: • Prozedural • Objektorientiert • Funktional • Klare, einfache Syntax • Portabel, verfügbar auf allen Plattformen mit C-Compiler • Windows, Mac OS, UNIX, LINUX, … • Leicht erweiterbar mit C/C++ Bibliotheken • Z. B. Bibliothek für Win32 und COM Herbstcampus 2008 – Titel des Vortrags 5 Charakterisierung von Python (2) • Python wird als dynamische Programmiersprache bezeichnet: • Python besitzt dynamische Typprüfung Herbstcampus 2008 – Titel des Vortrags 6 Python Datentypen W Object a c h s e None Boolean n d e K int, float, long complex str, unicode o mp l e x list tuple set dict i t ä t functions classes modules exceptions type Herbstcampus 2008 – Titel des Vortrags 7 Vordefinierte Datentypen in Python Typ Beispiele str ‘hello world’, “Python” unicode u’a unicode string’ int -3, 3, 4711 long 6624737266949237011120128L, 7L float 0.0, -3.1, 2e100, 2.76e-10 complex 8j, 2 + 3j list [], [1, 2, 3, 4, 5], [1.0, “xxx”, 3] tuple (), (1,), (1, 2, 3) dict {}, {'a': 12, 'b': 'xxx'} set set(), set([1, 2, 3, 4]) NoneType None bool True, False Herbstcampus 2008 – Titel des Vortrags 8 Eigenarten der Python-Syntax • Python erzwingt eine sehr lesbare Formatierung der Programme. • Ohne „Tabs“ Syntaxfehler! „Tabs“ Herbstcampus 2008 – Titel des Vortrags 9 Python: funktional und dynamisch # Generierung von Funktionen aus lambda-Ausdrücken def funcgen(varlist, expr): lambdastr = 'lambda ' i = 0 for v in varlist: if i == 0: lambdastr = lambdastr + v else: lambdastr = lambdastr + ',' + v i = i + 1 lambdastr = lambdastr + ': ' + expr print lambdastr return eval(lambdastr) g = funcgen(['x', 'y'], '(x + y) ** 3') Herbstcampus 2008 – Titel des Vortrags 10 Gründe für Python • Warum Python? • Einfach zu lernen und zu benutzen • => steile Lernkurve • Erlaubt schnelle Entwicklung und Prototyping • => geringe Entwicklungszeit • Viel Frameworks und Klassenbibliotheken • Web-Anwendungen (Django, …) • Technisch-wissenschaftliche Anwendungen (PIL, Scipy, Sympy, …) • Skriptsprache für Anwendungen wie: GIMP, Blender, ArcGIS, … Herbstcampus 2008 – Titel des Vortrags 11 Python Implementierungen • Das original Python wird auch als CPython bezeichnet (in C implementiert) • Jython eine Implementierung von Python in Java für die Java JVM • http://www.jython.org/Project/contributors.html • PyPy ist eine Implementierung von Python in Python • http://codespeak.net/pypy/dist/pypy/doc/home.html • IronPython Implementierung von Python in C# für .NET Herbstcampus 2008 – Titel des Vortrags 12 Etwas Statistik TIOBE Programming Community Index for September 2008 • A mainstream languages • B < 0.7% http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Herbstcampus 2008 – Titel des Vortrags 13 Agenda • Python • IronPython & die Dynamic Language Runtime • Benutzung von .NET Bibliotheken in IronPython • ADO.NET • WPF • Einbetten von IronPython in Applikationen • Interoperabilität • IronPython & Cpython • Interoperabilität CPython - .NET Herbstcampus 2008 – Titel des Vortrags 14 IronPython: ein Rückblick How coTuhled s Mpeiecdro osfo tfht e current have scsryestweemd iusp s oso l obwa dalsy to render that thet hCeL cRu rirs efnatr iwmoprlseem entation thauns ethlees sJ VfoMr afonry thing beyond dynamdiecm laonngsturaagtieosn? purposes. Let me check this out. I will write a short paper - “WhTyh .eN CELTI i sis a, bteyr dreibsilge n, not pfrlaietnfodrlmy tfoo dr ydnyanmamici cla nguages. Protolatynpgeusa gweesr"e built, but ran way too slowly. InfoWorld, Aug. 2003 Jim Hugunin John Udell Herbstcampus 2008 – Titel des Vortrags 15 IronPython Versionen • IronPython 1.x • Aktuelle Version: IronPython 1.1.2 • IronPython 2.0 • IronPython 2.0 ist mit der Dynamic Language Runtime (DLR) implementiert • Aktuelle Version: IronPython 2.0 Beta 4 • http://www.codeplex.com/IronPython Herbstcampus 2008 – Titel des Vortrags 16 IronPython (1) • IronPython ist als zip-File, msi-Installationspaket oder als Quellcode erhältlich. • Verzeichnisstruktur IronPython 2.0: Herbstcampus 2008 – Titel des Vortrags 17 IronPython (2) • ipy.exe: • Ausführen von IronPython-Skripts mit interaktiver Console • ipyw.exe: • Ausführen von IronPython-Skripts ohne interaktive Console • Umgebungsvariable: • IRONPYTHONPATH: • Suchpfad für Python-Module • IRONPYTHONSTARTUP: • Suchpfad für Startup-Module Herbstcampus 2008 – Titel des Vortrags 18 IronPython Ausführungsmodell .NET Python Calls Calls Python Code Framework Libraries Libraries Compiled by IronPython Engine C a l Produces l s Assembly (in memory) Executed by .NET Runtime Herbstcampus 2008 – Titel des Vortrags 19 Entwicklungsumgebung: IronPython Studio • Download: http://www.codeplex.com/IronPythonStudio • Mit dem VS 2008 SDK implementiert Herbstcampus 2008 – Titel des Vortrags 20 IronPython performance: Pystones/second • Venerable benchmark • Dhrystone in Python • In Lib/test/pystone.py • Only benchmark that ships with Python • Simple but non-trivial • ~200 lines of code • Most basic Python ops • Very little OO • 32-bit Vista Enterprise Service Pack 1.0 • .NET 3.5 SP1 (2.0.50727.3053) • AMD x64 X2 4200+4.00 GB RAM • IronPython 2.0 Beta 4 Pystones C python 2.5.2 51275,5 IronPython 2.0 B eta 4 81788,3 Ipy / C py = 1,595 Herbstcampus 2008 – Titel des Vortrags 21 Demo: IronPython • Commandozeile: • IronPython Console: ipy.exe • IronPython Skriptr ausführen: ipyw.exe • IronPython Studio Herbstcampus 2008 – Titel des Vortrags 22 Dynamic Language Runtime (1) • Plattform zur Implementierung von dynamischen Sprachen auf .NET • Basiert auf Erfahrungen von Jim Hugunin‘s bei der Implementierung von IronPython 1.0 auf .NET • Die DLR ist ein Aufsatz auf dem .NET Framework und wurde in C# implementiert. IronPython IronRuby … Dynamic Language Runtime (DLR) .NET Framework 2.0 Herbstcampus 2008 – Titel des Vortrags 23 Dynamic Language Runtime (2) • Nutzt die Dienste und Eigenschaften des .NET Frameworks: • Garbage collector • Just-in-time Compiler (JIT) • .NET Bibliotheken • Werkzeuge • Vereinfachte Beschreibung der DLR: • Gegeben ist ein abstrakter Syntaxbaum (AST). Die DLR führt die Operationen und Konstrukte des Syntaxbaums aus, unter Berücksichtigung der Operationen und Regeln, welche für die Sprache definiert sind. Basisoperationen werden auf CLR Default-Operationen zurückgeführt (Integer-Operationen, …) Herbstcampus 2008 – Titel des Vortrags 24 Dynamic Language Runtime (3) Python Quellkode • Python Quellkode wird in einen „Python“-AST transformiert Python Abstract Syntax Tree • „Python“-AST wird in DLR-AST transformiert DLR Abstract Syntax Tree • DLR-AST wird in IL (Intermediate Language) übersetzt, mittels IL Code CODEDOM, und von der CLR ausgeführt. .NET CLR Herbstcampus 2008 – Titel des Vortrags 25 Zusammenfassung DLR • Die Dynamic System Runtime (DLR) ist die Grundlage für die effiziente und performante Implementierung dynamischer Sprachen mit .NET • Die DLR bietet Werkzeuge: • Zum eigentlichen Implementieren der Sprache, wie Erzeugen von Abstrakten Syntaxbäumen und effiziente Codegenerierung für die .NET CLR • Erzeugung von „Sprach unabhängigen“ ASTs • Einbetten der Sprache in eigenen Applikationen (Skriptconsolen, …) • Die Implementierung der DLR befindet sich in den Assemblies: • Microsoft.Scripting.dll • Microsoft.Scripting.Core.dll Herbstcampus 2008 – Titel des Vortrags 26 Agenda • Python • IronPython & die Dynamic Language Runtime • Benutzung von .NET Bibliotheken in IronPython • ADO.NET • WPF • Einbetten von IronPython in Applikationen • Interoperabilität • IronPython & Cpython • Interoperabilität CPython - .NET Herbstcampus 2008 – Titel des Vortrags 27 .NET Bibliotheken in IronPython (1) • In IronPython können sämtliche Klassenbibliotheken des .NET Frameworks benutzt werden. • In IronPython können die .NET Namensräume von geladenen Assemblies wie Python-Pakete behandelt werden Herbstcampus 2008 – Titel des Vortrags 28 .NET Bibliotheken in IronPython (2) • .NET Assemblies werden wie folgt bekannt gemacht: import clr clr.AddReference("System.Data") • IRONPYTHONPATH muss die Verzeichnisse enthalten, in denen sich die referenzierten Assemblies befinden • clr ist ein in IronPython eingebauter Modul, der Methoden zum Referenzieren von .NET Assemblies bereitstellt. • clr.References gibt eine Liste aller existierenden Referenzen aus. Herbstcampus 2008