zurück

Was ist Smalltalk?

Start

Smalltalk ist eine objektorientierte Programmiersprache, eine große Klassenbibliothek und eine interaktive Programmierumgebung in einem.

Das ist zwar zutreffend, aber es erklärt nicht, warum Smalltalk diejenigen, die sich damit auseinandersetzen, so schnell begeistern kann. Auch Java oder C# sind objektorientierte Programmiersprachen, haben teils sehr umfangreiche Klassenbibliotheken und interaktive Programmierumgebungen sind seit einigen Jahren Standard.

Was ist an Smalltalk so Besonderes?

Gerne wird dazu angeführt: "Smalltalk started it all". Smalltalk war die erste konsequent objektorientierte Sprache (und die zweite Sprache mit OO-Elementen nach Simula, für das die OO-Konzepte erfunden wurden). Smalltalk war Ursprung oder Katalysator für die heutigen Workstations, die Mausbedienung, Fenstersysteme, interaktive Entwicklungsumgebungen und viele Techniken wie VM, GC, die heute wie selbstverständlich von Java und C# verwendet werden. Das ist alles historisch sehr interessant und man kann dies in folgenden Quellen nachlesen:

"THE EARLY HISTORY OF SMALLTALK" by Alan C. Kay, in History of Programming
Languages, Thomas J. Bergin and Richard G. Gibson, Eds. Addison-Wesley, ISBN 0-201-89502-1.

"The Community of Smalltalk" by Adele Goldberg, in Handbook of Programming
Languages, Vol. 1. Object-Oriented Programming Languages, Peter H Salus, Ed. McMillan, ISBN 1-57870-008-6.

Erklären kann man damit die Begeisterung für Smalltalk nicht. Diese liegt in den inneren Qualitäten von Smalltalk und seiner Umgebung.

Die Programmiersprache Smalltalk ist rein objektorientiert, reflexiv und implizit getypt. Huh? Das bedeutet praktisch, dass Smalltalk eine völlig andere Programmierung ermöglicht als andere, aus prozeduralen Sprachen wie C abgeleitete OO-Sprachen.

Rein objektorientiert bedeutet, dass jeder Wert und jede Datenstruktur ein Objekt ist. Wir kennen in Smalltalk nicht die Unterscheidung von literalen Werten wie Zahlen, Zeichen oder Zeichenketten und Objekten, der zum Beispiel von C++ und seinen Abkömmlingen gemacht wird. Der Ausdruck '23' erzeugt eine Instanz der Klasse SmallInteger, die über eine kurze Hierarchie von der Klasse Object abgeleitet ist. Damit versteht die Zahl 23 alle Nachrichten, die in dieser Hierarchie definiert sind und man kann in der Klasse SmallInteger auch neue Methoden implementieren. Ebenso erzeugt man Arrays nicht durch eine dedizierte Syntax, sondern schlicht durch eine Erzeugungsnachricht an die Klasse Array, z.B. 'Array new: 4'. Reine Objektorientierung vermeidet künstliche Unterscheidungen von Werten und Objekten, die schwer motivierbar sind.

Reflexiv bedeutet, dass Smalltalk in Smalltalk implementiert ist. Die Objekte, die die Sprache Smalltalk definieren, sind selber mit den Mitteln der Sprache beschrieben. Daher sind Klassen und Methoden selber wieder Smalltalk-Objekte und gehen bei der Übersetzung einer Klasse nicht einfach in dem erzeugten Programm auf. Damit wird auch unser obiges Beispiel 'Array new: 4' klarer. Die Klasse Array ist selber ein Objekt, das man unter seinem Namen ansprechen kann und das unter anderem eine Methode 'new:' implementiert. Die Verwendung von Smalltalk Objekten zur Definition des Smalltalk-Systems erlaubt dem Programmierer sowohl die Sprache selbst als auch die Programmierumgebung zu erweitern. In diesem Umfang ist es wohl in keiner anderen konventionellen Umgebung möglich.

Eine implizit getypte Sprache besitzt zwar Typen -- in Smalltalk sind dies die Klassen der Objekte -- aber die Zuordnung der Typen zu Objekten erfolgt zur Laufzeit und muss nicht als Typdeklaration zur Programmierzeit angegeben werden. Damit ist Smalltalk typsicher: es ist unmöglich, ein Programm durch Verwendung einer unverstandenen Nachricht zum Absturz zu bringen. Die Reflexivität von Smalltalk erlaubt es, eine solche illegale Situation zu erkennen und innerhalb von Smalltalk zu behandeln. Das geht sogar so weit, dass man den Fehlerfall durch Programmieren der fehlenden Methode behandeln kann und das 'abgestürzte' Programm danach weiterlaufen kann. Wir wollen hier nicht auf die unlösbare aber dennoch (oder vielleicht deshalb?) mit viel Elan geführte Diskussion pro-contra Typdeklarationen eingehen. Smalltalk funktioniert bestens auch ohne explizit angegebene Typen.

Die Reflexivität von Smalltalk macht aber nicht bei der Sprache Halt. Auch die Klassenbibliothek und die Entwicklungsumgebung sind komplett in Smalltalk realisiert. Compiler, Debugger und das Browsersystem sind Smalltalk-Programme und liegen in der Regel in Quelltexten vor. Der Browser ist gleichzeitig ein integrierter Editor, Sourcecode-Analysator und Refaktorisierungswerkzeug, das in seinen Möglichkeit derzeit unübertroffen ist. Das Fehlen von Typdeklarationen und die Reflexivität hat eine interessante Konsequenz für den klassischen "Edit, Compile, Debug"-Zyklus: es gibt keine unvollständigen Klassendefinitionen und daher kann man Klassen und ihre Methoden voneinander unabhängig übersetzen. In Smalltalk zu programmieren bedeutet, Klassen inkrementell Methode für Methode aufzubauen. Zu jedem Zeitpunkt kann die partielle Klasse verwendet und ausgetestet werden. Dies erlaubt perfekte Möglichkeiten für schnelle "Edit, Compile, Debug"-Zyklen auf Sourcecode Ebene.

Ein bisschen Technik

Smalltalk läuft auf einer virtuellen Maschine VM -- einem abstrakten Computer -- den man auf unterschiedlichen Plattformen implementieren kann. Ein Smalltalk-Programm wird für diesen abstrakten Computer übersetzt und ist damit unabhängig von der Zielplattform. Da die virtuelle Maschine auch die Plattform-Resourcen abstrahiert anbietet, ist ein Smalltalk-Programm binär auf allen Plattformen mit passender virtueller Maschine lauffähig. Die Technik virtueller Maschinen kann bis auf Peter Landins SECD Machine für LISP zurückverfolgt werden, die zum Anfang der 60er Jahre entworfen wurde. Schon 1983 fügte die Smalltalk-Gruppe am PARC die Technik des JIT (just in time compilation) der virtuellen Maschine von Smalltalk hinzu, um sie auf handelsüblichen Rechnern effizient lauffähig zu machen (auf einem Motorola 68020 System). Das war die erste Implementierung eines implizit getypten, dynamisch kompilierten Systems mit später Bindung (late-binding).

Das Konzept einer virtuellen Maschine und die reine Objektorientierung von Smalltalk erlaubt eine automatische Verwaltung des Objekt-Speichers. Dazu besitzt die Smalltalk-VM einen sogenannten Garbage Collector, der selbsttätig und effizient erkennt, welche Objekte nicht mehr verwendet werden und der den von ihnen benutzten Speicher wiederverwendet. 'Generation scavenging', der erste wirklich performante Algorithmus für die Speicherverwaltung, wurde zuerst in Berkely Smalltalk implementiert und dann in die zweite Generation von virtuellen Maschinen der Firma ParcPlace Systems eingebaut. Diese Architektur ist auch heute noch in VisualWorks in Verwendung.

Eine kurze Geschichte von Smalltalk

Smalltalk wurde am Xerox Palo Alto Research Center in den 70er und 80er Jahren entwickelt. Die Sprache wurde entworfen um Verständlichkeit mit Ausdruckskraft und Flexibilität zu kombinieren. Der Einsatz an lokalen Schulen half dabei, ein System zu erschaffen, dass reaktionsschnell war (Kinder werden schnell ungeduldig) und gleichzeitig Spaß bei der Bedienung machte (Kinder würden es sonst nicht benutzen!).

1988 wurde aus Xerox heraus Parcplace System gegründet, um Smalltalk kommerziell zu verwerten. Parcplace Systems verschmolz 1995 mit Digitalk zu Parcplace-Digitalk, und wurde 1997 zu ObjectShare umbenannt. 1999 wurde die VisualWorks-Technologie von Cincom aufgekauft. Dabei übernahm Cincom das ganze Engineering-Team und forcierte eine beachtliche Weiterentwicklung und Umsetzung neuer Technologien aus dem Internet-Umfeld.

Die Stärken von Smalltalk

Die bisher beschriebenen Eigenschaften von Smalltalk als Programmiersprache und -umgebung ergeben in der Praxis einige wichtige Stärken, die für einen Einsatz von Smalltalk sprechen.

Smalltalk erlaubt die einfache und flexible Modellierung von Konzepthierarchien, die dem klassischen Muster der schrittweisen Verfeinerung vom Allgemeinen zum Speziellen folgt. Damit bietet sich Smalltalk geradezu prototypisch für die Modellierung von Geschäftswissen an.

Smalltalk ist ein ausgereiftes, hoch-performantes und skalierbares System, das "write-once-run-everywhere" Ausführung erlaubt und das seit Anfang der 80er Jahre. Die Auswahl der verfügbaren Plattformen hängt vom Anbieter ab und deckt bei VisualWorks von Cincom alle aktuellen Workstations von PC, Mac bis hin zu den diversen Unix/Linux-Varianten ab.

Im Kontext von Smalltalk ist eXtreme Programming entwickelt worden und Smalltalk ist sicherlich die produktivste der XP-Entwicklungsumgebungen.

Smalltalk kann seine Stärken besonders in einem Umfeld mit hoher Änderungshäufigkeit ausspielen. Die integrierte inkrementelle Entwicklungsumgebung zusammen mit der Flexibilität, die sich aus den Reflexivität und der impliziten Typisierung ergibt, erlauben schnelle und jederzeit verifizierbare Modifikationen und schnelle Entwicklungszyklen.

In der Summe aller seiner Eigenschaften, von denen wir hier nur eine kleine Menge angeführt haben, empfiehlt sich Smalltalk und speziell Cincom Smalltalk für die Entwicklung komplexer und vielschichtiger Systeme, die fortwährend an eine sich ändernde Welt angepasst werden müssen.

Wir haben für Sie eine Liste der aktuelle verfügbaren Smalltalk-Systeme zusammengetragen.