Arbeitsgruppe Programmiersprachen und Übersetzerkonstruktion
Institut für Informatik
Christian-Albrechts-Universität zu Kiel
Seminararbeit
Smalltalk � Eine objektorientierte
Programmiersprache
Phil Stelzer
WS 2012/2013
Betreuer: Prof. Dr. Michael Hanus
Inhaltsverzeichnis
1 Einordnung 1
1.1 Geschichte der Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Entwicklung/Vorgängersprachen . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Paradigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Anwendungsgebiete 4
2.1 Wofür ist die Sprache beabsichtigt? . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Wo wird die Sprache eingesetzt? . . . . . . . . . . . . . . . . . . . . . . . 4
3 Konzepte und Struktur 5
3.1 Sprachbeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Was ist bei der Benutzung von Smalltalk zu beachten? . . . . . . . . . . . 6
3.3 Konzepte an Beispielen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3.1 Beispiel 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3.2 Beispiel 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4 Vergleich mit verwandten Sprachen . . . . . . . . . . . . . . . . . . . . . . 9
4 Technische Unterstützung 10
4.1 Compiler, Interpreter, Entwicklungsumgebung . . . . . . . . . . . . . . . . 10
4.2 Werkzeuge und Bibliotheken . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.3 Portabilität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5 Diskussion und Zusammenfassung 12
5.1 Vor- und Nachteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2 Zukunft der Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
ii
Abbildungsverzeichnis
1.1 Alan Kay mit einem Prototyp des Dynabooks . . . . . . . . . . . . . . . . 2
3.1 Nachrichten an Objekte senden . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Objektdumper als Beispiel für Re�ection . . . . . . . . . . . . . . . . . . . 8
4.1 Pharo als Beispiel einer typischen Smalltalk Umgebung . . . . . . . . . . . 10
5.1 Open Cobalt Projekt zeigt 3D Verlinkungen zu anderen Desktops . . . . . 13
5.2 Open Cobalt Nutzer schauen sich zusammen eine VNC Übertragung an . 14
iii
1 Einordnung
1.1 Geschichte der Sprache
Smalltalk wurde in den 1970er Jahren von Alan Kay, Dan Ingalls, Adele Goldberg und
anderen am Forschungszentrum Xerox PARC in Kalifornien entwickelt. Die erste Version
von Smalltalk wurde 1972 verö�entlicht. Das Konzept der Sprache entstand in den spä-
ten 1960er Jahren in der Ph.D. Dissertation von Alan Kay, der schon damals den Nutzen
von Computern für nicht-Programmierer voraussah. Seine Doktorarbeit befasste sich
mit einem Gerät, dem sogenannten 'Dynabook' (Abbildung 1.1), das mehrere Papier-
seiten durch Fenster darstellen kann und durch Tastendrücke bzw. Fingergesten direkt
auf dem Bildschirm gesteuert werden kann. Diese erstmal nur theoretisch formulierte
Idee verscha�te ihm daraufhin eine Anstellung am Xerox PARC, wo er in der 'Learning
Research Group' (1981 umbenannt in 'Software Concepts Group') seine Vision umzu-
setzen versuchte. Die Arbeitsgruppe konzentrierte sich auf zwei Hauptbereiche bei ihren
Forschungen: Eine Programmiersprache, die als Schnittstelle zwischen den Modellen im
menschlichen Geist und der in Computer-Hardware dient, und eine Benutzerober�äche
die auf die Kommunikation von Menschen mit Computern angepasst ist [GR83]. Einher-
gehend mit diesen Forschungen wurden verschiedene Experimente durchgeführt, die sich
damit beschäftigten Kindern das Programmieren beizubringen. Die Entwicklungen ende-
ten in der 1980 vorgestellten Version Smalltalk-80, die Alan Kay's Vision fast vollständig
erfüllte.
In den nachfolgenden Jahren bis in die 90er verbreitete sich Smalltalk eher mäÿig.
Die Anforderungen an die Hardware durch die graphische Ober�äche war anspruchsvoll
und für die meisten C-Programmierer war C++ der aussichtsreichere Umstieg. Anfang
und Mitte der 90er Jahre gab es jedoch einen kurzen Aufschwung, da unter anderem
IBM damit begann, Smalltalk in Groÿkundenprojekten einzusetzen und die Anzahl der
verfügbaren Implementierungen stark zunahm. Gebremst wurde dies schon Ende der 90er
von Java, welches durch das Internet zu gröÿerer Popularität gelangt war.
1996 wurde Squeak von den ursprünglichen Smalltalk Entwicklern verö�entlicht. Squeak
ist eine plattformunabhängige Implementierung inklusive Entwicklungsumgebung für Small-
1
1 Einordnung
talk und wird in dem Projekt 'One Laptop Per Child' als Lernumgebung eingesetzt.
Abbildung 1.1: Alan Kay mit einem Prototyp des Dynabooks
Aufbauend auf der Frage nach einer optimalen Mensch-Computer-Schnittstelle - und
damit Alan Kays Vision - fand in den letzten Jahren eine Weiterentwicklung und An-
passung der Antwort auf diese Frage statt. Mit dem Croquet-Projekt wurde 2007 eine
Plattform verö�entlicht, die nicht nur 2D Ober�ächen in Smalltalk, sondern 3D Objekte
in einer Art 'virtual reality' darstellt. Interessant dabei ist, dass der Nutzer während der
Benutzung Objekte der Welt in Echtzeit verändern und anpassen kann. Die Weiterent-
wicklung wurde 2009 an das Open Cobalt Projekt übergeben und wird aktiv gep�egt.
1.2 Entwicklung/Vorgängersprachen
Die Entwicklung von Smalltalk wurde in einigen Punkten von den Sprachen Lisp und
Simula beein�usst.
Von Lisp, das 1958 spezi�ziert wurde, wurden Konzepte wie das so genannte 'garbage
collecting' übernommen.
Simula, als Vorgänger der objektorientierten Programmiersprachen, führte die Schlüs-
selwörter 'class', 'new', 'this' ein, die auch heute noch in modernen Programmiersprachen
verwendet werden. Auch das Klassenkonzept, Vererbung, Typen, Methoden und Eigen-
schaften wurden ähnlich in Smalltalk eingesetzt.
Das Konzept, eine Art Schreibtisch als 2D Ober�äche darzustellen, hatte groÿen Ein-
2
1 Einordnung
�uss auf die heute verbreiteten Desktopkonzepte von Microsoft Windows und OS X von
Apple. Die von Smalltalk verwendete virtuelle Maschine sowie der Garbage Collector
sind Grundlage für die Plattformunabhängigkeit in Java.
Der letzte o�zielle Standard von Smalltalk wurde 1980 mit Smalltalk-80 verö�ent-
licht. Dieser wird am konsequentesten durch die Implementierung Squeak umgesetzt und
durch andere Projekte wie 'Pharo' oder 'VisualAge Smalltalk' erweitert und an aktuelle
Computerarchitekturen angepasst.
1.3 Paradigma
Smalltalk ist eine objektorientierte, re�ektive, dynamisch typisierte, Abbild-basierende
('image based') Programmiersprache. Eine objektorientierte Programmiersprache ver-
packt ihre Daten und Methoden, um die Daten zu verändern, in Objekten. Die einzige
Möglichkeit die Daten zu modi�zieren besteht darin, Nachrichten an das entsprechende
Objekt zu schicken. Attribute von Objekten können nicht durch direkten Zugri� von
auÿen geändert werden. Auf diese Weise wird das Konzept der Datenkapselung ('data
encapsulation') sichergestellt.
Ein weiterer Aspekt der objektorientierten Programmierung ist die Vererbung. Durch
Vererbung steigert sich die sogenannte 'code reusability', indem schon geschriebene Me-
thoden an Kindklassen weitergegeben bzw. vererbt werden können. Kritiker der objekt-
orientierten Programmierung bezeichnen das Paradigma als 'Software bloat'. Joe Arm-
strong, der Er�nder von Erlang, bringt diese Kritik mit den Worten "The problem with
object-oriented languages is they've got all this implicit environment that they carry
around with them. You wanted a banana but what you got was a gorilla holding the
banana and the entire jungle."[Wik13a] auf den Punkt.
Smalltalk jedoch setzt die Eigenschaften der objektorientierten Programmierung kon-
sequent um und hat mit diesem Paradigma viele andere heute noch populäre Sprachen
beein�usst.
3
2 Anwendungsgebiete
2.1 Wofür ist die Sprache beabsichtigt?
Smalltalk und die damit verbundene Desktopumgebung war ursprünglich vor allem für
Schüler und Schulen gedacht. Alan Kay's Idee war es eine Umgebung für Schüler zu schaf-
fen, die die Interaktion mit dem Computer selbst für Kinder möglich macht. Im Mittel-
punkt dabei standen vor allem das Denken in Objekten, was der natürlichen Denkweise
eines Menschen nahe kommt. Das Interface von Smalltalk versucht, eine visuelle Sprache
zu Objekten zu scha�en und den Computer damit zu einem veränderbaren, interaktiven
Medium zu machen. Auch die Verwendung eines Zeigegeräts war schon früh geplant und
zeigt, wie nah das Konzept von Smalltalk und der graphischen Darstellung dem heutigen
'personal computer' kommt.
2.2 Wo wird die Sprache eingesetzt?
Heutzutage wird Smalltalk in der Wirtschaft nur selten eingesetzt, obwohl es kommerzielle
Projekte wie 'VA Smalltalk' gibt.
Der eigentliche Zweck jedoch, Smalltalk vor allem für Schüler als Lernmedium einzuset-
zen, ist mit der auf Squeak basierenden EToys Implementierung weitestgehend geglückt.
Die Initiative 'One Laptop Per Child (OLPC)' setzt auf den verwendeten Laptops (die
dem Vorbild des Dynabooks sehr nahe kommen) unter anderem EToys ein und wird von
Alan Kay aktiv unterstützt [Wik12, Children's Machine].
Das Open Cobalt Projekt, welches die Darstellung des Desktops als 3D Ober�äche
und das Teilen von Ressourcen durch sogenannte '3D Portale' mit anderen Benutzern
ermöglicht, be�ndet sich in aktiver Entwicklung.
Generell ist Smalltalk weiterhin eher eine Nischensprache, die kaum in kommerziellen
Projekten eingesetzt wird, dafür jedoch immer noch viele Anhänger als Hobbyprogram-
mierer hat.
4
3 Konzepte und Struktur
3.1 Sprachbeschreibung
Das wohl markanteste Merkmal an Smalltalk ist seine konsequent eingesetzte Objektori-
entierung. Die aus Java bekannten primitiven Typen wie Integer oder Character werden
in Smalltalk ebenfalls durch Objekte repräsentiert. Sogar ausführbarer Code, Stackframes
und Speicher sind Objekte.
Im Allgemeineren basiert Smalltalks Objektmodel auf den folgenden fünf Regeln [BDNP09]:
Rule 1. Everything is an object.
Rule 2. Every object is an instance of a class.
Rule 3. Every class has a superclass.
Rule 4. Everything happens by sending messages.
Rule 5. Method lookup follows the inheritance chain.
Beim genaueren Betrachten der Regeln fällt vor allem auf, dass demnach auch Klassen
Objekte sein müssen. Diese Eigenschaft ist fundamental, denn sie macht Smalltalk zu
einem re�ektiven System.
Re�ektivität bzw. 're�ection' bedeutet, dass das Verhalten und die Struktur (Eigen-
schaften und Methoden) eines Objekts zur Laufzeit geändert werden kann. Dies bietet
verschiedene Vorteile wie die Überwachung von Klassen und Objekten und das Ändern
von Codeblöcken zur Laufzeit des Programmes.
Eine weitere Eigenschaft ist das dynamische Binden von Nachrichten an Methoden.
Eine gesendete Nachricht an ein Objekt löst eine Suche nach der entsprechenden Me-
thode in der Klasse des Objekts aus. Wenn diese Suche ergebnislos bleibt, wird in der
Eltern-Klasse weiter gesucht bis zur Wurzel der Vererbungshierarchie, zur Klasse 'Ob-
ject'. Sollte bis dahin keine passende Methode gefunden worden sein, wird ein Fehler
ausgelöst. In Smalltalk hat, bis auf die Wurzelklasse 'Object', jede Klasse genau eine
Oberklasse. Wichtig ist dabei zu erwähnen, dass die Suche erst genau beim Senden der
5
3 Konzepte und Struktur
Nachricht ausgelöst wird; zu keinem Zeitpunkt werden Methoden statisch an Namen
gebunden. Ebenso sind auch Variablen nicht typisiert. Die Bedeutung einer Nachricht
an eine Variable wird nur durch die aktuelle Klasse des Objekts festgelegt, an das die
Variable gerade gebunden ist.
Smalltalk unterstützt des Weiteren genau drei eingebaute Konstrukte:
• Senden einer Nachricht an ein Objekt.
• Zuweisen eines Objekts an eine Variable.
• Ein Objekt als Rückgabewert liefern.
Es wird deutlich, dass es nur wenige, dafür konsequent eingesetzte Paradigmen gibt,
die Smalltalk zu einer leicht erlernbaren und mächtigen Sprache machen.
3.2 Was ist bei der Benutzung von Smalltalk zu beachten?
Auf den ersten Blick ist Smalltalk sehr verschieden zu populären Sprachen. Man ver-
misst die Möglichkeit, ein geschriebenes Programm als abgeschlossene Einheit zu kom-
pilieren und auszuführen. Wie später noch näher beschrieben, wird Smalltalk zusammen
mit seinen Bibliotheken in einer fertigen virtuellen Maschine ausgeliefert. Was zuerst als
Nachteil aussieht bietet jedoch beim Entwickeln von Programmen entscheidende Vortei-
le. So ist der Debugger bzw. die Entwicklungsumgebung auch während der Laufzeit des
Programmes noch verfügbar und bietet so vielfältige Möglichkeiten, auf Ausnahmen zu
reagieren oder Quelltext zu testen. Gerade geschriebener Code kann direkt in der Pro-
duktivumgebung getestet und eingep�egt werden und etwaige Umwege wie nochmaliges
Kompilieren entfallen. Gewöhnungsbedürftig ist die Umgebung dennoch, da man die aus
anderen Sprachen angewohnten Praktiken gröÿtenteils umlernen muss.
3.3 Konzepte an Beispielen
In diesem Abschnitt werde ich an Beispielen das Paradigma von Smalltalk erläutern.
3.3.1 Beispiel 1
Zu Anfang werde ich ein Beispiel zum Senden von Nachrichten an Objekte angeben und
demonstrieren, dass wirklich alles in Smalltalk ein Objekt ist.
6
3 Konzepte und Struktur
1 | array block |
2 array := #(5 6 11 12) .
3 block := [ : i | i +10] .
4
5 block value : 7 . "17"
6 block c l a s s . "BlockClosure "
7
8 array s e l e c t : [ : i | i >6] . "#(11 12) "
9 array c o l l e c t : b lock . "#(15 16 21 22) "
Abbildung 3.1: Nachrichten an Objekte senden
Das Beispiel in Abbildung 3.1 zeigt nun eine Collectionoperation in Smalltalk. Die
erste Zeile de�niert zwei temporäre Variablen, 'array' und 'block'. Au�allend dabei sind
die fehlenden Typangaben. Da Smalltalk eine streng dynamisch typisierte Sprache ist,
werden ausnahmslos alle Typen erst zur Laufzeit ermittelt. In der nächsten Zeile wird
zuerst das Array mit Testdaten gefüllt und anschlieÿend ein Block de�niert. Ein Block
in Smalltalk ist vergleichbar mit anonymen Funktionen aus anderen Sprachen, allerdings
muss beachtet werden, dass auch hier die Variable 'block' ein Objekt ist und somit
Nachrichten erhalten und beantworten kann. Hier erwartet die Funktion einen Parameter
und addiert auf diesen die Zahl 10. In Zeile 5 wird das erste Mal eine Nachricht versendet.
In diesem Fall die Nachricht 'value' mit dem Wert 7.
Man unterscheidet in Smalltalk zwischen 'unary messages', 'binary messages' und 'key-
word messages'. Als 'unary messages' bezeichnet man Nachrichten ohne Parameter wie
'x sin' oder '5 factorial'. 'binary messages' sind meistens arithmetische, logische oder
vergleichende Operationen auf zwei Operanden. Beispiele sind '3 + 5' oder '7 <= 10'.
Die letzte und in unserem Fall zutre�ende Nachricht sind die 'keyword messages'. Die-
se können beliebig viele Parameter haben und nehmen die Form 'AnObject aName1:
parameter1 aName2: parameter2 [...]' an.
Das Statement in Zeile 5 liefert als Ergebnis die Zahl 17. Die Nachricht 'value' bewirkt
also, dass der Block mit dem Parameter '7' ausgeführt wird. Zum Beweis, dass es sich
wirklich um ein Objekt handelt, kann man 'block', wie allen Objekten in Smalltalk, jetzt
noch die unäre Nachricht 'class' schicken, welche die Klasse des Objekts zurückgibt.
Zeile 8 führt nun eine Operation auf der Collection 'array' aus. 'Collection' ist in
Smalltalk eine abstrakte Klasse, die verschiedene Methoden implementiert, die zur Be-
arbeitung von Listen und Mengen nützlich sind. Hier wird die Nachricht 'select' benutzt
7
3 Konzepte und Struktur
um 'array' ein Blockobjekt zu übergeben, welches nur Zahlen gröÿer als 6 zulässt. Das
Ergebnis ist als Kommentar angegeben. Man erkennt, dass Blöcke auch als Funktionen
höherer Ordnung benutzt werden können. Dies wird in der nächsten Zeile genutzt um
'array' die Nachricht 'collect' zu senden und unser am Anfang eingeführtes Blockobjekt
als Parameter zu übergeben.
3.3.2 Beispiel 2
Das zweite Beispiel in Abbildung 3.2 beschäftigt sich mit Re�ection. Wie schon in vorigen
Kapiteln angesprochen, ist Smalltalk ein re�ektives System; man kann daher während
der Laufzeit auf Metainformationen eines Objekts zugreifen.
1 | objdumper |
2 objdumper :=
3 [ : anyObject |
4 anyObject c l a s s al l InstVarNames
5 doWithIndex : [ : name : idx |
6 Transcr ipt
7 show : name ;
8 show : ' i s ' ;
9 show : ( anyObject instVarAt : idx ) ;
10 cr .
11 ]
12 ] .
13 objdumper value : Rectangle
Abbildung 3.2: Objektdumper als Beispiel für Re�ection
Die erste Zeile de�niert eine temporäre Variable 'objdumper', die in der zweiten Zeile
einen Block zugewiesen bekommt. Dieser Block erwartet ein Argument als Wert bei
der Übergabe ('anyObject'). Die vierte Zeile ist interessant, denn hier wird die Nachricht
'class' an das übergebene Objekt gesendet, welches die Klasse des Objekts zurückgibt. Die
nächste Nachricht wird daher an die Klasse des übergebenen Objekts geschickt und zwar
'allInstVarNames'. Wie schon zu vermuten ist, gibt eben diese Nachricht eine Collection
aller Instanzvariablennamen zurück.
Nun kann man dieser Collection die Nachricht 'doWithIndex' senden, welche über die
Liste iteriert und nacheinander Name sowie Inhalt der aktuellen Variable ausgibt. Die
Semikolons trennen dabei aufeinanderfolgende Nachrichten an dasselbe Objekt, hier also
8
3 Konzepte und Struktur
an 'Transcript'. Dieses Beispiel soll zeigen, dass selbst zur Laufzeit eines Programmes
alle Funktionen eines Debuggers zur Verfügung stehen. Man hat nicht nur Zugri� auf
Variablen von Objekten und deren Werten, sondern sogar auf die Struktur von Klassen.
3.4 Vergleich mit verwandten Sprachen
Unter den heute als objektorientiert bezeichneten Sprachen ist Smalltalk wohl die 'reinste'.
Das oben beschriebene Objektmodell wird konsequent umgesetzt.
Java verletzt dieses Paradigma, indem es primitive Typen einführt, die keine Objekte
sind. So würde in Smalltalk das Statement '8 + 2' eine binäre Nachricht '+' an das Objekt
'8' mit dem Parameter '2' senden. In Java werden diese arithmetischen Operationen nicht
mit Objekten und Nachrichten gelöst, sondern mit primitiven Typen. Allerdings bestehen
zu Java auch Parallelen, wie der Garbage Collector und die virtuelle Maschine, die es wie
Smalltalk sehr portabel macht.
Der Grund, aus dem verwandte Sprachen die Objektorientierung von Smalltalk nur
inkonsequent umsetzen, sind wohl die mit der dynamischen Bindung verbundenen Lauf-
zeiteinbuÿen. Methoden können nicht fest vorkompiliert werden, sondern müssen zur
Laufzeit gefunden werden. Wie schon im vorigen Abschnitt erklärt, erfolgt dadurch eine
Iteration über die Vaterklassen bis die entsprechende Methode gefunden wurde. Java be-
nutzt primitive Typen, um bei arithmetischen Operationen schneller zu sein, und benutzt
eine explizite Typangabe, um wenigstens teilweise den Methodenaufruf zu beschleunigen.
Java unterstützt zwar auch Re�ection, jedoch fehlt die Möglichkeit, auch Metadaten wie
Methoden oder Klassen zur Laufzeit zu generieren.
Objective-C versucht, die Flexibilität von Smalltalk nachzuahmen ohne dabei Laufzeit
einzubüÿen und verzichtet deswegen auf Blöcke. Auch die Syntax erinnert an Smalltalk
[Wik13b].
Generell gilt Smalltalk als die Sprache, die das Paradigma der objektorientierten Pro-
grammierung als erste komplett umgesetzt hat [Seb12, Seite 545] und wurde von vielen
nachfolgenden Sprachen zum Teil als Vorbild genutzt.
9
4 Technische Unterstützung
4.1 Compiler, Interpreter, Entwicklungsumgebung
Abbildung 4.1: Pharo als Beispiel einer typischen Smalltalk Umgebung
Smalltalk bezeichnet einerseits die Sprache als solche und andererseits die komplette
Entwicklungsumgebung inklusive GUI.
In Abbildung 4.1 ist eine solche dargestellt. Gut zu erkennen ist der für die Entwick-
lung in Smalltalk unerlässliche Klassenbrowser. Dieser stellt alle verfügbaren Klassen
inklusive Methoden dar und kann benutzt werden, um diese zu verändern oder neue
Klassen hinzuzufügen. Auÿerdem zu sehen ist das sogenannte 'Transcript' Fenster. In
diesem können Fehlermeldungen ausgegeben werden oder es kann direkt benutzt werden,
um Code auszuführen. Der Entwickler muss nur geschriebenen Quelltext markieren und
kann ihn daraufhin per Menuauswahl ausführen. Auch hier ist der Unterschied zu anderen
Compilern o�ensichtlich. Der Code muss nicht in Dateien gespeichert werden, sondern
kann direkt Anpassungen an schon bestehenden Klassen vornehmen. Diese Änderungen
wiederum sind dementsprechend auch für alle anderen Objekte im System sichtbar und
benutzbar.
10
4 Technische Unterstützung
4.2 Werkzeuge und Bibliotheken
Standardmäÿig wird mit Smalltalk nicht nur ein Compiler ausgeliefert, sondern direkt ei-
ne komplette virtuelle Maschine inklusive einem Image, welches Entwicklungsumgebung,
Debugger und alle Klassen die für ein lau�ähiges System benötigt werden, enthält. Das
Image repräsentiert dabei den aktuellen Zustand aller Objekte der virtuellen Maschine.
Ein weiterer Unterschied zu anderen Sprachen ist, dass in Smalltalk neue Klassen nicht in
Dateien gespeichert, sondern direkt in die virtuelle Maschine eingep�egt werden können.
Diese Änderungen und Ergänzungen an Objekten und Klassen können per Mausklick
direkt im aktuell laufendem Image gespeichert werden.
Zusätzliche Bibliotheken können mit Tools wie 'SqueakMap' oder Repositories in Pharo
von anderen Benutzern geladen werden.
4.3 Portabilität
Smalltalk bzw. Squeak ist für alle modernen Betriebssysteme erhältlich. Auch für Android
steht eine virtuelle Maschine zur Verfügung. Änderungen am aktuell verwendeten Image
(s.o.) können direkt gespeichert werden und sind auch auf anderen Betriebssystemen
ausführbar, solange dieselbe virtuelle Maschine verwendet wird.
11
5 Diskussion und Zusammenfassung
5.1 Vor- und Nachteile
Der wohl signi�kanteste Nachteil an Smalltalk ist seine vergleichsweise langsame Aus-
führungsgeschwindigkeit, die gerade in den frühen Jahren eine groÿe Hürde für neue
Entwickler und die damalig benutzten Systeme darstellte. Dieser Nachteil hatte starke
Auswirkungen auf die Verbreitung von Smalltalk und machte die Alternativen wie C++
und Java zu attraktiveren Konkurrenten.
Auch, dass Smalltalk eine 'image-based language' ist, machte es schwer, diese in den
Mainstream zu integrieren. Zwar macht diese Eigenschaft es einfach in Smalltalk zu
arbeiten und integriert die Entwicklungsumgebung gleich mit in den Desktop, jedoch
wird es dadurch schwerer, Programme als Stand-Alone Produkte zu verö�entlichen.
Neben diesen Nachteilen gibt es jedoch auch Vorteile. Die durchgehende Objektori-
entierung verscha�t einem Möglichkeiten, die man in verwandten Sprachen nicht hatte
oder durch Workarounds lösen musste. Die Re�ektivität erlaubt es Programme zu schrei-
ben, die ihren eigenen Sourcecode generieren und ausführen. Vor allem in der künstlichen
Intelligenz sind solche Features besonders elegant einzusetzen.
5.2 Zukunft der Sprache
Im Allgemeinen ist die Zukunft von Smalltalk schwer vorherzusehen. Einerseits besteht
immer noch Interesse an der Sprache und es gibt relativ viele Projekte, die auf Smalltalk
basieren und das Sprachkonzept weiter nutzen. Andererseits spielt vor allem der Perfor-
mance Nachteil eine groÿe Rolle in der Wirtschaft, weswegen dort vor allem Sprachen
mit nicht konsequenter Objektorientierung, dafür jedoch schnelleren Laufzeiten einge-
setzt werden.
Die von Alan Kay formulierte Vision eines Desktops scheint mit Squeak weitgehend
erfüllt worden zu sein. Projekte wie Open Cobalt versuchen auch heute noch einen leicht
an die persönlichen Bedürfnisse anpassbaren Desktop anzubieten, der jedoch die heutzu-
tage üblichen Gra�kkarten und die damit zur Verfügung stehenden Ressourcen ausnutzt.
12
5 Diskussion und Zusammenfassung
Abbildung 5.1: Open Cobalt Projekt zeigt 3D Verlinkungen zu anderen Desktops
So kann mit Open Cobalt der Desktop nicht nur in zwei Dimensionen, sondern in 3D
benutzt werden und bietet Werkzeuge, die die Verlinkung von Arbeits�ächen zwischen
Benutzern (Abbildung 5.1) sowie Zusammenarbeit auf diesen ermöglicht (Abbildung 5.2).
Das System baut auf Squeak auf und kann so weitgehend die Vorteile einer auf Smalltalk
basierenden Umgebung ausnutzen.
Dennoch muss man sagen, dass sich die Verbreitung von Smalltalk und die damit
verbundene Popularität in Grenzen hält und eher eine Nischenposition in den heute
verwendeten Sprachen einnimmt.
Gerade jedoch, weil Smalltalk immer noch Anhänger hat, die an der Idee festhalten,
wird die Entwicklung der Sprache auch in Zukunft noch weitergehen, denn die eigentliche
Idee eines portablen, selbst für Kinder erlernbaren Computers scheint noch nicht ganz
verloren gegangen zu sein.
13
5 Diskussion und Zusammenfassung
Abbildung 5.2: Open Cobalt Nutzer schauen sich zusammen eine VNC Übertragung an
14
Literaturverzeichnis
[BDNP09] Black, Andrew P. ; Ducasse, Stéphane ; Nierstrasz, Oscar ; Pollet,
Damien: Pharo by Example. http://gforge.inria.fr/frs/download.php/
25599/PBE1-2009-10-28.pdf, 2009. � [Online; accessed 30-December-2012]
[GR83] Goldberg, Adele ; Robson, David: Smalltalk-80: the language and its im-
plementation. Boston, MA, USA : Addison-Wesley Longman Publishing Co.,
Inc., 1983. � ISBN 0�201�11371�6
[Seb12] Sebesta, Robert W.: Concepts of Programming Languages. 10th. Pearson,
2012. � ISBN 0273769103, 9780273769101
[Wik12] Wikipedia: Alan Kay � Wikipedia, The Free Encyclopedia. \url{http:
//en.wikipedia.org/w/index.php?title=Alan_Kay&oldid=521524185}.
Version: 2012. � [Online; accessed 30-December-2012]
[Wik13a] Wikipedia: Object-oriented programming � Wikipedia, The Free En-
cyclopedia. \url{http://en.wikipedia.org/w/index.php?title=
Object-oriented_programming&oldid=531167863}. Version: 2013. �
[Online; accessed 2-January-2013]
[Wik13b] Wikipedia: Objective-C �Wikipedia, The Free Encyclopedia. \url{http://
en.wikipedia.org/w/index.php?title=Objective-C&oldid=531112834}.
Version: 2013. � [Online; accessed 31-December-2012]
15