Am Beispiel von VisualWorksSmalltalk kann man deutlich machen, wie Portabilität im Sinne der Smalltalk-80 Prinzipien umgesetzt werden kann. Die VirtuelleMaschine von VisualWorks ist nicht in Smalltalk sondern in C oder C++ geschrieben. Die VM führt ein Image bestehend aus Smalltalk-Bytecode aus. Der Bytecode enthält Referenzen auf eine weitere Datei, in der der eigentliche Sourcecode abgelegt ist. Sowohl das Image als auch die Sourcen können auf mehrere Dateien verteilt werden. Das Programm ist auch ohne Sourcen lauffähig und aus Image und VM lassen sich auch reine Executables bauen. Bis hierher entspricht das in etwa dem, was auch in Java gemacht wird.
Ein Smalltalk-Image enthält zunächst die Entwicklungsumgebung oder zumindest Teile davon. Diese lässt sich jedoch entfernen, Ergebnis ist dann meist ein sogenanntes Runtime-Image. Runtime-Image plus VM ergeben zusammen die fertige Anwendung. In das Runtime-Image kann je nach Art der Runtime-Erstellung auch dynamisch Code nachgeladen werden. Dafür braucht die Anwendung nicht beendet werden. In einem Entwicklerimage besteht der Prozess der Softwareentwicklung darin, dass man genau das tut. Man verändert und ergänzt ein bereits laufendes System, welches als Snapshot jederzeit abgespeichert werden kann. Ich kann also eine Anwendung laufen lassen, sie währen sie läuft ändern, sie jederzeit abspeichern und am nächsten Morgen dort weitermachen, wo ich aufgehört habe.
Was bedeutet in diesem Kontext Portabilität?
Damit ein Smalltalk-Image auf einer bestimmten Plattform ausgeführt werden kann, muss zunächst eine zum Samalltalk-Dialekt passende VM für diese Plattform existieren. Prominente Smalltalk-Dialekte wie VisualWorks und SqueakSmalltalk laufen auf immens vielen Plattformen, darunter auch viele mobile Geräte.
Existiert eine VM, dann kann ich bei VisualWorks ein auf Plattform A erstelltes Image abspeichern, nach Plattform B kopieren und dort an dem Punkt weitermachen, wo ich vorher aufgehört habe. Natürlich werden sämtliche nativen Threads beim Abspeichern beendet. Ein Großteil einer Smalltalk-Anwendung läuft jedoch in Instanzen der Smalltalk-Klasse Process ab und diese "leichten" Prozesse sind wie alle Smalltalk-Objekte durch das Abspeichern des Images persistenzierbar. Ich kann also laufende Smalltalk-Prozesse auf eine andere Plattform transportieren.
|
Die GUI von VisualWorks emuliert den Look & Feel der Plattform. Man kann den Look frei wählen, default ist automatische Umstellung auf den Look der Plattform. SqueakSmalltalk macht das ähnlich, hat aber im Grunde einen ganz eigenen Look.
Die Krux in Bezug auf Portabilität in Smalltalk: Der ANSI-Standard legt nur ein Kerngerüst der Sprache und Klassenbibliothek als Standard fest. Die GUI-Anteile verschiedener Smalltalk-Dialekte sind meist nicht portabel.
Gerade der hohe Grad an Portabilität des Original-Smalltalk (VisualWorks ist der direkte Nachfolger von Smalltalk-80) hat dazu geführt, dass es in Smalltalk eine Reihe plattformspezifischer Dialekte gibt.
Siehe auch: