So funktioniert SmalltyPy

SmalltyPy ist für VisualWorks 64-Bit entwickelt worden, und nutzt eine normale Entwicklerinstallation von Python der python.org Webseite für Windows, MacOS und Linux.

Durch die Nutzung der Python-DLL in SmalltyPy via DLLCConnect befinden sich Python- und Smalltalk-Objekte in demselben Prozess. Beide teilen sich denselben Speicherbereich und ermöglichen in jeder Hinsicht direkte Objekt-Zugriffe. Dadurch sind mitunter keine Konvertierungen nötig, und Message-Sends/Funktionsaufrufe sowie der Zugriff auf Instanzvariablen/Attribute werden mit der gewohnt hohen Geschwindigkeit für C-Aufrufe/Zugriffe durchgeführt.

Architektur

Der von SmalltyPy angelegte und verwaltete ‚Object Buffer‘ ermöglicht den VisualWorks Anwendungen den Zugriff auf Python Klassen und Instanzen. Damit können neue Python Objekte erzeugt und deren Funktionen aufgerufen werden.

Zugriff auf Klassen und Instanzen

Beispiele und Screenshots

Ausführung eines Python-Scrips in einer VisualWorks-Methode:

Ausführen eines Python Scripts

Ausführung der Python-Funktionen in VisualWorks:

Funktionen ausführen

Das nächste Beispiel bereitet die Daten in VisualWorks auf und führt die Grafikberechnung mit matplotlib in Python durch, um sie dann in Smalltalk weiterzuverwenden bzw. anzuzeigen:

SmalltyPy ermöglicht die Integration in das System durch Schreiben kompletter Python-Klassen, deren Funktionen in Python ausführt, aber in VisualWorks zugreifbar sind.

Python Klassen

Eine Syntaxanalyse wird während des Editierens im SystemBrowser einer Funktion mit Python durchgeführt:

Syntaxanalyse

Die implementierten Funktionen können optimiert werden, indem Typ-Informationen hinzugefügt und dann die Numba-Bibliothek zur Optimierung verwendet wird; damit kann die gesamte Klasse „gejitted“ werden und die Ausführungsgeschwindigkeit damit erhöht werden. Von Python unterstützte Infrastrukturen, Python Anwendungscode in mehreren OS-Threads (CPU bzw. GPU unterstützt) auszuführen, kann damit auch von VisualWorks genutzt werden.

Die SmalltyPy Umgebung unterstützt die Anzeige von Python-Objekten im Inspector und zeigt die verfügbaren Attribute und Funktionen inklusive  erweiterter Typinformationen an. Der Inspektor funktioniert genau wie der Inspektor für Smalltalk-Objekte - die einzelnen Attribut-Slots können wie gewohnt per „drill down“ inspiziert werden.