WikiDer > Smalltalk (Programmiersprache)

Smalltalk (programmeertaal)
Den Artikel zum Sammelnamen für informelle Gespräche finden Sie unter Smalltalk (Sprache).
Smalltalk
ParadigmaObjektorientierten
erschien1980
Entworfen vonAlan KayoDan Ingalls, Adele Goldberg, Larry Tesler
Entwickelt vonAlan KayoDan Ingalls, Adele Goldberg, Xerox Park
Typensystemdynamisch
Implementierungenquietschen, VisualWorks
Beeinflusst vonlispeln, Simula
Einfluss aufZiel c, Selbst, Java, Dylan, AppleScript, NewtonScript, Python, Reichweite, Perle 6
BetriebssystemMultiplattform
Portal  Portalsymbol  Informatik

Smalltalk ist ein objektorientiertenProgrammiersprache mit dynamischer Typisierung, die bei . entwickelt wurde Xerox PAR durch Alan Kayo, Dan Ingalls, Ted Kähler, Adele Goldberg, Larry Tesler und andere in der siebziger Jahre. Die Sprache wurde ursprünglich als Smalltalk-80 veröffentlicht und ist seitdem weit verbreitet.

Smalltalk wird ständig weiterentwickelt und rund um die Sprache hat sich eine treue Nutzergemeinschaft entwickelt. Smalltalk hat die Entwicklung vieler anderer Programmiersprachen stark beeinflusst, einschließlich Tal Ziel c, Java und Rubin. Tatsächlich ist der Einfluss auf letztere so groß, dass einige Smalltalker Ruby als Smalltalk mit einer anderen Syntax betrachten. Viele Programmierkonzepte aus den 1990er Jahren stammen aus der Smalltalk-Community, zum Beispiel die Anwendung des Konzepts von 'Design Patterns' auf Software, Extremes Programmieren und Refactoring. Ein bekannter Smalltalker ist Gemeinde Cunningham, der Erfinder des WikiWiki-Konzept.

Struktur

Einige Funktionen von Smalltalk:

  • "Alles ist ein Objekt." Strings, Zahlen, boolesche Werte, Klassendefinitionen, Codeblöcke und Speicher werden alle als Objekte dargestellt. Die Implementierung besteht aus dem Senden von Nachrichten zwischen Objekten. Jede Nachricht kann an jedes Objekt gesendet werden; das empfangende Objekt bestimmt, ob diese Nachricht angemessen ist und wie es verarbeitet wird.
  • Alles kann angepasst werden. Wenn man IDE Wenn Sie es ändern möchten, können Sie es - in einem laufenden System, ohne neu kompilieren oder neu beginnen zu müssen. Wenn eine neue Kontrollstruktur in der Sprache gewünscht wird, kann diese hinzugefügt werden. In einigen Implementierungen kann sogar die Syntax der Sprache geändert werden oder die Art und Weise der Objektbereinigung (Müllabfuhr) das passiert.
  • Typen sind dynamisch. Das bedeutet, dass im Code keine Typen definiert werden müssen, was die Sprache viel kompakter macht. (Wie bereits erwähnt, entscheidet eher das empfangende Objekt als der Compiler, ob eine bestimmte Nachricht angemessen ist.)
  • Erstellen von Benutzeroberflächen nach den Model-View-Controller-Modell.
  • Dynamische Übersetzung: Moderne kommerzielle virtuelle Maschinen kompilieren Bytecodes in den richtigen Maschinencode und kombinieren so Plattformunabhängigkeit mit Geschwindigkeit. Diese Idee wurde etwa zehn Jahre später von Java und habe den Namen bekommen just in time Zusammenstellung oder JIT-Kompilierung.

Einer der überraschendsten Aspekte von Smalltalk ist, dass traditionelle Programmierstrukturen wie if-then-else, for, while usw. nicht Teil der Sprache sind. All dies wird durch Objekte implementiert. Entscheidungen werden beispielsweise getroffen, indem eine iftrue-Nachricht an ein boolesches Objekt gesendet und ein Code-Snippet übergeben wird, das als boolesches ausgeführt wird wahr kehrt zurück. Es gibt nur drei integrierte ausführbare Konstrukte:

  • eine Nachricht an ein Objekt senden;
  • einer Variablen ein Objekt zuweisen;
  • ein Objekt als Ergebnis einer Methode zurückgeben;

und einige syntaktische Konstruktionen zum Deklarieren von Objekten mit einem festen Wert ('Literalobjekte').

Das folgende Codebeispiel zum Auffinden der Vokale in einer Zeichenfolge veranschaulicht den Smalltalk-Stil ( | dient zur Deklaration von Variablen, : für Parameterdeklaration).

| aString-Vokale |ein Faden:='Das ist eine Zeichenfolge'.Vokale:=ein Fadenwählen: [:ein Charakter|ein CharakterisVokal].

In der letzten Zeile wird eine "select:"-Nachricht an den String gesendet, mit dem nachfolgenden Codeblock als Argument. Hier ist der Code in der Collection-Superklasse, der die ganze Arbeit erledigt:

| neue Kollektion |neue Kollektion:=selbstSpeziesNeu.selbsttun: [:jeder|     (Ein BlockWert:jeder)         Wenn wahr: [neue Kollektionhinzufügen:jeder]].^neue Kollektion

Dieser Code antwortet auf die Nachricht, indem er alle Member in einer Schleife durchläuft (dies geschieht durch die Methode "do:"), wodurch der aBlock-Code einmal für jedes Zeichen ausgewertet wird; aBlock (aCharacter isVowel gibt bei der Auswertung einen booleschen Wert zurück, der dann ein ifTrue: sendet. Wenn der boolesche Wert wahr ist, wird das Zeichen an die zurückgegebene Zeichenkette angehängt.

Da select in der abstrakten Collection-Klasse definiert ist, können wir es auch so verwenden:

| Rechtecke aPunkt |Rechtecke:=BestellteKollektionmit: (Rechtecklinks:0Recht:10oben:100Unterseite:200)  mit: (Rechtecklinks:10Recht:10oben:110Unterseite:210).ein Punkt:=PunktX:20j:20.Kollision:=Rechteckewählen: [:aRect|aRectenthältPunkt:ein Punkt].

Geschichte

Smalltalk wurde von einer Gruppe von Forschern unter der Leitung von Alan Kay am XEROX Palo Alto Research Center entwickelt. Die erste Implementierung namens Smalltalk-71 entstand an wenigen Morgen nach einer Wette auf die Möglichkeit, eine Programmiersprache zu entwickeln, die auf der Idee des Message Passing basiert (inspiriert von Simula) in "einer Codeseite" zu implementieren. Eine spätere Version, die eigentlich für Forschungsarbeiten verwendet wurde, ist heute als Smalltalk-72 bekannt. Die Syntax und das Ausführungsmodell unterschieden sich stark vom modernen Smalltalk, so dass es als eine andere Sprache angesehen werden konnte.

Nach größeren Überarbeitungen entstand die als Smalltalk-76 bekannte Version. Diese Version hatte Vererbung und eine Syntax, die der von Smalltalk-80 viel näher kam. Auch dafür wurde eine Entwicklungsumgebung geschaffen, die die meisten Tools enthält, mit denen Smalltalk-Benutzer heute vertraut sind.

Smalltalk-80 fügte Metaklassen hinzu, die dabei helfen, die "Alles ist ein Objekt"-Anweisung aufrechtzuerhalten, indem Eigenschaften und Verhalten mit einzelnen Klassen verknüpft werden (z.

Smalltalk-80 war die erste Version, die außerhalb von PARC zur Verfügung gestellt wurde, zunächst als Smalltalk-80 Version 1 für einige Unternehmen und Universitäten (für einige Peer-Review). 1983 wurde eine weit verbreitete Implementierung, Smalltalk-80 Version 2, als "Image" (plattformunabhängige Objektdefinitionsdatei) und als Spezifikation für virtuelle Maschinen (Virtual Machine) veröffentlicht.

Zwei der derzeit populären Smalltalk-Implementierungen sind Nachkommen der ursprünglichen Smalltalk-80-Images. quietschen wird von Smalltalk-80 Version 1 über Apple SmallTalk abgeleitet. VisualWorks ist abgeleitet von Smalltalk-80 Version 2 bis Smalltalk-80 2.5 und ObjectWorks (beide Produkte von ParcPlace-Systeme, ein ausgründen von XEROX PARC, das zur Kommerzialisierung von Smalltalk gegründet wurde).

Implementierungen

Externe Links