Smalltalk Eine objektorientierte Programmiersprache

18

Transcript of Smalltalk Eine objektorientierte Programmiersprache

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