Smalltalk
Smalltalk
Smalltalk ist in meinen Augen das momentan beste Programmiersystem. Ich habe bewusst das Wort "Programmiersystem" und nicht "Programmiersprache" gewählt,
denn Smalltalk ist mehr als eine Programmiersprache. Man darf die Sprache Smalltalk nicht von dem Rest des Systems trennen. Ohne diesem "Rest" ist
Smalltalk nicht viel mehr wert als Java oder C++.
Was ist so besonders an Smalltalk?
-
Smalltalk ist eine echte objektorientierte Sprache. Anders als in den momentan gängigen OO-Sprachen (wie C#, Java und C++), ist in Smalltalk mit wenigen Ausnahmen alles ein Objekt.
Insbesondere sind Klassen auch Objekte. Das klingt zunächst wenig spektakulär, es ist aber von entscheidender Bedeutung: nahezu alles, was man in
Smalltalk macht, geschieht durch das Senden von Nachrichten an Objekte. Da Klassen in Smalltalk ebenfalls Objekte sind, werden auch neue Instanzen (= neue Objekte)
durch das Senden von Nachrichten (an Klassenobjekte) erzeugt. Das klingt auch noch nicht so außergewöhnlich, spielt aber dennoch eine wichtige Rolle:
-
Smalltalk ist minimalistisch, d.h. es wird versucht, mit möglichst wenig Syntax und Regeln auszukommen. Das erleichtert das Erlernen und Lesen von Smalltalk.
Anders als in Sprachen wie Java, C# und C++ ist es nicht notwendig, für jedes erkannte Defizit neue Syntaxregeln und Ausnahmen zu definieren.
Leider sind die ersten Programmiersprachen, die von jungen Leuten gelernt werden, heutezutage Java oder C#. Damit werden diese schon von Beginn an erzogen,
die komplizierte Syntax der C-Sprachen als notwendig zu betrachten. Das führt sogar soweit, dass viele Smalltalk-Code anfänglich schwerer verstehen,
obwohl dieser sehr nahe an der natürlichen Sprache angelehnt ist.
Beispielsweise würde der folgende Java-Code (bzw. C#- oder C++-Code): "klaus.uebergebe(johannes, 'Schulheft', 'Füller');" in Smalltalk etwa so aussehen:
"klaus gib: johannes bitte: 'schulheft' und: 'Füller'."
-
Smalltalk ist image-basiert. Das heisst, dass ein Smalltalksystem nicht nur aus einem ausführbaren Programm besteht, sondern zusätzlich eine
Binärdatei besitzt, die Heimat für alle Objekte ist. Damit wird Smalltalk zu einem System von "lebenden" Objekten, die schon zur Entwicklungszeit
entstehen und "angeguckt" werden können. Das "Angucken" geschieht mittels mächtiger Werkzeuge, sogenannter Browser, die sich der Reflection-Eigenschaften
von Smalltalk bedienen. Jeder, der C++, Java oder C# kennen gelernt hat, weiß auch, was Reflection (= "Selbstkenntnis") ist. Verglichen mit dem was Smalltalk
auf diesem Gebiet beherrscht, sind die meisten anderen Programmiersprachen erbärmlich.
-
Smalltalk besitzt Blockhüllen (block closures). Natürlich sind auch diese in Smalltalk Objekte. Es handelt sich hierbei, einfach ausgedrückt,
um verzögert ausgeführten Code. Das klingt auch wieder weniger ungewöhnlich, als es tatsächlich ist. Blöcke sind ein sehr mächtiges
Werkzeug, das aus der Lispwelt stammt (dort heissen sie einfach nur closures). Erst nach einiger Benutzung wird man deren Leistungsfähigkeit erkennen.
Zusammengefasst: Ich halte es für eine ziemliche Ressourcenverschwendung (Zeit, Geld und geistige Anstrengungen), Sprachen wie C++, Java oder C# für
die Entwicklung von Software einzusetzen. Allein in wenigen Ausnahmen ist der Einsatz dieser Programmiersprachen gerechtfertigt; keineswegs aber deren
Standardbenutzung.
Ich denke, dass diese Sprachen sich vor allem bei Leuten durchgesetzt haben, für die die Objektorientierung im Wesentlichen dazu dient,
die Daten vom Code zu trennen ("information hiding"), oder gar um Code einzusparen ("implementation inheritence").
Wer sich mit den Veröffentlichungen von Alan Kay, dem "Erfinder" des Begriffes "Objektorientierung",
befasst hat, weiß, dass dies keineswegs die Beweggründe für ihn gewesen sind, und simples information hiding weit an den eigentlichen
Zielen vorbeigeht.
Kein Wunder also, dass Softwareentwicklung immer noch in einer Krise steckt.
Smalltalk allgemein
Planet Smalltalk
The world of Smalltalk
Smalltalk-Newsgroups bei Nabble
Smalltalk Org
European Smalltalk Users' Group
Freie Bücher (gesammelt von Prof. Stephane Ducasse)
Smalltalk Frameworks und Anwendungen
AIDAweb Smalltalk Web Application Server
Iliad Web Framework
Seaside Framework
Pier content management system
Swazoo Smalltalk Web Server
Dabble DB
Dolphin Smalltalk
Dolphin Smalltalk (Object Arts)
Dolphinmap
Solutions Software
Ian's Dolphin Smalltalk Pages
Omnibase & Source Tracking System (STS) Wiki
Weitere Smalltalk-Implementierungen
GemStone/S
GNU Smalltalk
Smalltalk MT
Smalltalk/X (Exept)
#Smalltalk
Squeak
VA Smalltalk (Instantiations)
VisualWorks & ObjectStudio Smalltalk (Cincom)
smalltalk-ähnliche Sprachen
Newspeak Language
Self Language
Strongtalk
Letzte Änderung am 10. Mai 2010