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 Reection................... 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 Papierseiten durch Fenster darstellen kann und durch Tastendrücke bzw. Fingergesten direkt auf dem Bildschirm gesteuert werden kann. Diese erstmal nur theoretisch formulierte Idee verschate ihm daraufhin eine Anstellung am Xerox PARC, wo er in der 'Learning Research Group' (1981 umbenannt in 'Software Concepts Group') seine Vision umzusetzen 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]. Einhergehend mit diesen Forschungen wurden verschiedene Experimente durchgeführt, die sich damit beschäftigten Kindern das Programmieren beizubringen. Die Entwicklungen endeten 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 Anpassung 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 Weiterentwicklung 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üsselwörter 'class', 'new', 'this' ein, die auch heute noch in modernen Programmiersprachen verwendet werden. Auch das Klassenkonzept, Vererbung, Typen, Methoden und Eigenschaften 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 ozielle Standard von Smalltalk wurde 1980 mit Smalltalk-80 veröentlicht. 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, reektive, dynamisch typisierte, Abbild-basierende ('image based') Programmiersprache. Eine objektorientierte Programmiersprache verpackt ihre Daten und Methoden, um die Daten zu verändern, in Objekten. Die einzige Möglichkeit die Daten zu modizieren 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 Methoden an Kindklassen weitergegeben bzw. vererbt werden können. Kritiker der objektorientierten Programmierung bezeichnen das Paradigma als 'Software bloat'. Joe Armstrong, der Ernder 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 konsequent um und hat mit diesem Paradigma viele andere heute noch populäre Sprachen beeinusst. 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 schaffen, die die Interaktion mit dem Computer selbst für Kinder möglich macht. Im Mittelpunkt 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 schaen 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 einzusetzen, 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, bendet 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 Hobbyprogrammierer hat. 4
3 Konzepte und Struktur 3.1 Sprachbeschreibung Das wohl markanteste Merkmal an Smalltalk ist seine konsequent eingesetzte Objektorientierung. 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 reektiven System. Reektivität bzw. 'reection' bedeutet, dass das Verhalten und die Struktur (Eigenschaften 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 Methode 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 'Object'. 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 vermisst die Möglichkeit, ein geschriebenes Programm als abgeschlossene Einheit zu kompilieren 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 Vorteile. 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 Produktivumgebung getestet und eingepegt 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 : block. "#(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 deniert zwei temporäre Variablen, 'array' und 'block'. Auallend 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 deniert. 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 'keyword 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 zutreende Nachricht sind die 'keyword messages'. Diese 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 Bearbeitung 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 Reection. Wie schon in vorigen Kapiteln angesprochen, ist Smalltalk ein reektives 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 allinstvarnames 5 dowithindex : [ : name : idx 6 T r a n s c r i p t 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 Reection Die erste Zeile deniert 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 Laufzeiteinbuÿ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 benutzt 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 Reection, 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 Programmierung 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 Entwicklung 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 oensichtlich. 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 eine 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 eingepegt 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 signikanteste Nachteil an Smalltalk ist seine vergleichsweise langsame Ausfü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 Objektorientierung verschat einem Möglichkeiten, die man in verwandten Sprachen nicht hatte oder durch Workarounds lösen musste. Die Reektivität erlaubt es Programme zu schreiben, 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 Performance Nachteil eine groÿe Rolle in der Wirtschaft, weswegen dort vor allem Sprachen mit nicht konsequenter Objektorientierung, dafür jedoch schnelleren Laufzeiten eingesetzt 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 heutzutage üblichen Grakkarten 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] [Seb12] [Wik12] Goldberg, Adele ; Robson, David: Smalltalk-80: the language and its implementation. Boston, MA, USA : Addison-Wesley Longman Publishing Co., Inc., 1983. ISBN 0201113716 Sebesta, Robert W.: Concepts of Programming Languages. 10th. Pearson, 2012. ISBN 0273769103, 9780273769101 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 Encyclopedia. \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