Smalltalk
Smalltalk ist ein objektorientierter, dynamisch getippt reflektierend Programmiersprache. SmallTalk wurde als die Sprache erstellt, die der "neuen Welt" des Berechnung von "Human -Computer -Symbiose" untermauert.[4] Es wurde zum Teil für entworfen und geschaffen für lehrreich verwenden, speziell für Konstruktionistisches Lernen, bei der Lernforschungsgruppe (LRG) von Xerox Parc durch Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Diana Merry, Scott Wallace und andere in den 1970er Jahren.
Die Sprache wurde zuerst allgemein als SmallTalk-80 veröffentlicht. SmallTalk-ähnliche Sprachen sind in aktiver Entwicklung und haben treue Gemeinschaften von Benutzern in ihrer Umgebung gesammelt. ANSI SmallTalk wurde 1998 ratifiziert und repräsentiert die Standardversion von SmallTalk.[5]
SmallTalk belegte den zweiten Platz für "am liebste Programmiersprache" in der Paketüberfluss Entwicklerumfrage im Jahr 2017,[6] Aber es gehörte nicht zu den 26 beliebtesten Programmiersprachen der Umfrage 2018.[7]
Geschichte
Es gibt eine große Anzahl von SmallTalk -Varianten.[8] Das unqualifizierte Wort Smalltalk wird oft verwendet, um die SmallTalk-80-Sprache anzuzeigen, die erste Version, die öffentlich verfügbar und 1980 erstellt wurde. Die ersten Hardware-Umgebung, die die SmallTalk-VMs ausführen, waren Xerox Alto Computers.
SmallTalk war das Produkt der Forschung, die von unter der Leitung von Alan Kay bei Xerox Palo Alto Research Center (Parc); Alan Kay entwarf die meisten frühen SmallTalk -Versionen, Adele Goldberg schrieb den größten Teil der Dokumentation, und Dan Ingalls implementiert die meisten frühen Versionen. Die erste Version, die SmallTalk-71 bezeichnet hat, wurde von Kay an einigen Morgen an einer Wette erstellt, die eine Programmiersprache basierend auf der Idee von Nachrichtenübergang inspiriert von Simula könnte in "einer Seite von Code" implementiert werden.[4] Eine spätere Variante, die für Forschungsarbeiten verwendet wird, wird jetzt als SmallTalk-72 bezeichnet und hat die Entwicklung der Schauspielermodell. Es ist Syntax- und Ausführungsmodell waren sehr unterschiedlich von modernen SmallTalk -Varianten.
Nach erheblichen Überarbeitungen, die einige Aspekte der Ausführungssemantik einfroren, um Leistung zu erzielen (durch Einführung von a Simula-ähnliche Klasse Nachlass Modell der Ausführung), SmallTalk-76 wurde erstellt. Dieses System hatte a Entwicklungsumgebung Mit den meisten inzwischen bekannten Tools, einschließlich eines Browsers/Editors der Klassenbibliothek. Smalltalk-80 hinzugefügt Metaklasse, um das "alles ist ein Objekt" (außer Variablen) Paradigma zu erhalten, indem Eigenschaften und Verhalten mit einzelnen Klassen und sogar Primitiven wie ganzzahlige und boolesche Werte (z.
SmallTalk-80 war die erste Sprachvariante, die außerhalb von PARC erhältlich war, zuerst als SmallTalk-80 Version 1, der einer kleinen Anzahl von Firmen (Hewlett Packard, Apple Computer, Tektronix, und Digital Equipment Corporation (Dec)) und Universitäten (UC Berkeley) zum Peer Review und implementieren auf ihren Plattformen. Später (1983) wurde eine allgemeine Verfügbarkeitsimplementierung mit dem Namen SmallTalk-80 Version 2 als Bild (plattformunabhängige Datei mit Objektdefinitionen) und a veröffentlicht virtuelle Maschine Spezifikation. ANSI SmallTalk ist seit 1998 die Standard -Sprachreferenz.[9]
Zwei der derzeit beliebten SmallTalk-Implementierungsvarianten sind Nachkommen dieser ursprünglichen SmallTalk-80-Bilder. Quietschen ist ein Open Source Implementierung abgeleitet von SmallTalk-80 Version 1 über Apple SmallTalk. Visualworks stammt von SmallTalk-80 Version 2 über SmallTalk-80 2.5 und ObjectWorks (beide Produkte von Parcplace Systems, einem Xerox-Parc-Spin-off-Unternehmen, das SmallTalk auf den Markt bringt). Als interessante Verbindung zwischen Generationen im Jahr 2001 implementierte Vassili Bykov Hobbes, eine virtuelle Maschine, die SmallTalk-80 in VisualWorks ausführt.[10] (Dan Ingalls Später portierte Hobbes zum Quietschen.)
In den späten 1980er bis Mitte der neunziger Jahre wurden SmallTalk-Umgebungen-einschließlich Unterstützung, Schulung und Add-Ons-von zwei konkurrierenden Organisationen verkauft: Parcplace Systems und Digitalk, beide in Kalifornien ansässig. Parcplace Systems konzentrierten sich tendenziell auf den Markt für UNIX/Sun Microsystems, während sich Digitalk auf Intel-basierte PCs ausführte, die Microsoft Windows oder IBMs OS/2-Unternehmen ausführen. Beide Firmen hatten Mühe, den SmallTalk-Mainstream aufgrund der erheblichen Speicherbedürfnisse von SmallTalk, einer begrenzten Laufzeit und einem anfänglichen Mangel an unterstützter Konnektivität an zu nehmen Sql-basierend relationale Datenbank Server. Während der hohe Preis von Parcplace SmallTalk seine Marktdurchdringung auf mittelgroße und große kommerzielle Organisationen beschränkte, versuchten die Digitalk-Produkte zunächst, ein breiteres Publikum mit einem günstigeren Preis zu erreichen. IBM unterstützte zunächst das Digitalk -Produkt, trat jedoch 1995 mit einem SmallTalk -Produkt als Visualage/SmallTalk auf den Markt ein. Easel führte zu diesem Zeitpunkt Enfin unter Windows und OS/2 ein. Enfin wurde in Europa weitaus populärer, als IBM es vor ihrer Entwicklung von IBM SmallTalk (später Visualage) in IT -Shops einführte. Enfin wurde später von erworben von Cincom -Systemeund wird jetzt unter dem Namen verkauft ObjectStudiound ist Teil der Cincom SmallTalk -Produktsuite.
Im Jahr 1995 fuhren Parcplace und Digitalk in Pacape-Digitalk und wurden dann 1997 als ObjectShare in Irvine, CA, umbenannt. ObjectShare (Nasdaq: Objs) wurde bis 1999 öffentlich gehandelt, als es gelöscht und aufgelöst wurde. Das zusammengeführte Unternehmen hat es nie geschafft, eine wirksame Antwort auf eine wirksame Reaktion zu finden Java In Bezug auf die Marktpositionierung und 1997 wollten die Eigentümer das Geschäft verkaufen. 1999 erwarb Seagull Software das ObjectShare Java -Entwicklungslab COCM.[11] Visualworks wurde an verkauft an COCM und ist jetzt Teil von Cincom SmallTalk. Cincom hat SmallTalk stark unterstützt und seit 1999 jedes Jahr mehrere neue Versionen von Visualworks und ObjectStudio veröffentlicht.
COCM, Gemtalk und Instanziationen, verkaufen weiterhin SmallTalk -Umgebungen. IBM hat Ende der neunziger Jahre das Ende des Lebens von Visualage Smalltalk beschlossen, stattdessen Java zurückzusetzen, und es ist ab 2005 es ist.[aktualisieren], unterstützt von Instantiations, Inc.[12] die in das Produkt VA SmallTalk (riesige Plattform) umbenannt und weiterhin neue Versionen jährlich veröffentlichen. Die Öffnung Quietschen Die Implementierung hat eine aktive Gemeinschaft von Entwicklern, darunter viele der ursprünglichen SmallTalk -Community, und wurde kürzlich verwendet, um die ETOYS -Umgebung auf der Umgebung zu bieten OLPC Projekt, ein Toolkit für die Entwicklung kollaborativer Anwendungen Krocketprojekt, und die Offener Kobalt Virtuelle Weltanwendung. Gnu smalltalk ist ein gratis Software Implementierung eines Derivats von SmallTalk-80 aus dem GNU Projekt. Pharo SmallTalk ist eine Gabel von Quietschen Ausgestattet an Forschung und Verwendung in kommerziellen Umgebungen.
Eine bedeutende Entwicklung, die sich ab 2016 in allen SmallTalk -Umgebungen ausbreitet, ist die zunehmende Verwendung von zwei Webrahmen. Strand und Aida/Web, um das Erstellen komplexer Webanwendungen zu vereinfachen. Seaside hat ein beträchtliches Marktinteresse mit Cincom, Gemstone und Instanziationen verzeichnet, die es einbezogen und erweitert.
Einflüsse
SmallTalk war eine von vielen objektorientierten Programmiersprachen basierend auf Simula.[13] SmallTalk ist auch eine der einflussreichsten Programmiersprachen. Praktisch alle objektorientierten Sprachen, die danach kamen-Flavors,[14] Schloss, Ziel c, Java, Python, Rubin,[15] und viele andere - wurden von SmallTalk beeinflusst. SmallTalk war auch eine der beliebtesten Sprachen für Agile Software Entwicklung Methoden, Schnelle Anwendungsentwicklung (Rad) oder Prototyping und Software -Designmuster.[16] Die hochproduktive Umgebung, die von SmallTalk -Plattformen bereitgestellt wurde, machte sie ideal für eine schnelle iterative Entwicklung.
SmallTalk kam aus einem größeren Programm von hervor Agentur für fortschrittliche Forschungsprojekte (ARPA) finanzierte die Forschung, die in vielerlei Hinsicht die moderne Computerwelt definierte. Zusätzlich zu SmallTalk arbeiten Prototypen von Dingen wie z. Hypertext, GUIS, Multimedia, Die Maus, Telepräsenzund das Internet wurde in den 1960er Jahren von ARPA -Forschern entwickelt.[17][18] Alan Kay (einer der Erfinder von SmallTalk) beschrieb auch einen Tablet -Computer, den er das nannte Dynabook Das ähnelt modernen Tablet -Computern wie dem iPad.[4]
SmallTalk-Umgebungen waren oft die ersten, die die heutigen gängigen objektorientierten Software-Designmuster entwickelten. Eine der beliebtesten ist die Model View Controller (MVC) Muster für Benutzeroberfläche Entwurf. Mit dem MVC -Muster können Entwickler mehrere konsistente Ansichten derselben zugrunde liegenden Daten haben. Es ist ideal für Softwareentwicklungsumgebungen, in denen verschiedene Ansichten (z. B. Entitätsbeziehung, Datenfluss, Objektmodell usw.) derselben zugrunde liegenden Spezifikation vorhanden sind. Auch für Simulationen oder Spiele, bei denen das zugrunde liegende Modell aus verschiedenen Blickwinkeln und Abstraktionsebenen betrachtet werden kann.[19]
Zusätzlich zum MVC -Muster war die SmallTalk -Sprache und -umgebung in der Geschichte der Geschichte sehr einflussreich grafische Benutzeroberfläche (GUI) und die Was du siehst ist was du kriegst (Wysiwyg) Benutzeroberfläche, Schriftartredakteure und Desktop -Metaphern für UI -Design. Die leistungsstarken Tools für integrierte Debugging- und Objektinspektion, die mit SmallTalk-Umgebungen geliefert wurden Integrierte Entwicklungsumgebungen, beginnen mit Lisp -Maschine Umgebungen, die danach kamen.[20]
Objekt orientierte Programmierung
Wie in anderen objektorientierten Sprachen ist das zentrale Konzept in SmallTalk-80 (aber nicht in SmallTalk-72) das von einem Objekt. Ein Objekt ist immer ein Beispiel von a Klasse. Klassen sind "Blaupausen", die die Eigenschaften und das Verhalten ihrer Instanzen beschreiben. Beispielsweise könnte die Fensterklasse einer GUI erklären, dass Fenster Eigenschaften wie das Etikett, die Position und die Frage haben, ob das Fenster sichtbar ist oder nicht. Die Klasse könnte auch erklären, dass Instanzen Operationen wie das Öffnen, Schließen, Umzug und Verstecken unterstützen. Jedes bestimmte Fensterobjekt würde seine eigenen Werte dieser Eigenschaften haben, und jedes von ihnen kann in der Lage sein, Operationen durch seine Klasse auszuführen.
Ein SmallTalk -Objekt kann genau drei Dinge tun:
- Zustand halten (Verweise auf andere Objekte).
- Erhalten Sie eine Nachricht von sich selbst oder einem anderen Objekt.
- Senden Sie im Verlauf der Verarbeitung einer Nachricht Nachrichten an sich selbst oder an ein anderes Objekt.
Der Zustand, den ein Objekt hält, ist immer privat für dieses Objekt. Andere Objekte können diesen Status nur abfragen oder ändern, indem sie Anforderungen (Nachrichten) an das Objekt senden, um dies zu tun. Jede Nachricht kann an jedes Objekt gesendet werden: Wenn eine Nachricht empfangen wird, stellt der Empfänger fest, ob diese Nachricht angemessen ist. Alan Kay hat kommentiert, dass Messaging trotz der Aufmerksamkeit, die Objekten gelenkt hat Abgeschlossen in unserer Xerox -PARC -Phase). "[21]
Im Gegensatz zu den meisten anderen Sprachen können SmallTalk -Objekte während des Ausführens des Systems geändert werden. Live -Codierung Die Anwendung von Korrekturen „On-the-Fly“ ist eine dominante Programmiermethode für SmallTalk und einer der Hauptgründe für die Effizienz.
SmallTalk ist eine "reine" objektorientierte Programmiersprache, was bedeutet, dass dies im Gegensatz zu C ++ und JavaEs gibt keinen Unterschied zwischen Werten, die Objekte und Werte sind, die primitive Typen sind. In SmallTalk sind primitive Werte wie Ganzzahlen, Boolesche und Zeichen ebenfalls Objekte, in dem Sinne, dass sie Fälle entsprechender Klassen sind, und Operationen werden durch Senden von Nachrichten aufgerufen. Ein Programmierer kann sich ändern oder sich ausdehnen (durch Unterklasse) Die Klassen, die primitive Werte implementieren, so dass neues Verhalten für ihre Instanzen definiert werden kann - zum Beispiel, um neue Kontrollstrukturen zu implementieren - oder sogar, damit ihr vorhandenes Verhalten geändert wird. Diese Tatsache wird in der allgemein hörenden Phrase "In SmallTalk alles ist ein Objekt" zusammengefasst, das genauer als "alle Werte sind Objekte" ausgedrückt werden können, wie es Variablen nicht sind.
Da alle Werte Objekte sind, Klassen sind auch Objekte. Jede Klasse ist eine Instanz der Metaklas dieser Klasse. Metaklasse wiederum sind auch Objekte und alle Fälle einer Klasse namens Metaclass. Codeblöcke- Smalltalks Art, auszudrücken Anonyme Funktionen- sind auch Objekte.[22]
Betrachtung
Betrachtung ist ein Begriff, den Informatiker für Softwareprogramme anwenden, die in der Lage sind, ihre eigene Struktur zu inspizieren, beispielsweise ihre Baum analysieren oder Datentypen von Eingangs- und Ausgangsparametern. Reflexion ist ein Merkmal dynamischer, interaktiver Sprachen wie SmallTalk und Lisp. Interaktive Programme mit Reflexion (entweder interpretiert oder kompiliert) behalten den Zustand aller In-Memory-Objekte bei, einschließlich des Codebobjekts selbst, die während der Parsen/Kompilierung generiert werden und programmatisch zugänglich und modifizierbar sind.
Reflection ist auch ein Merkmal, wie SmallTalk ein Meta-Modell hat. Das Meta-Modell ist das Modell, das die Sprache beschreibt, und Entwickler können das Meta-Model verwenden, um Dinge wie durchzugehen, zu untersuchen und den Parse-Baum eines Objekts zu modifizieren oder alle Instanzen einer bestimmten Art von Struktur zu finden (Struktur ( z. B. alle Instanzen der Methodenklasse im Meta-Modell).
SmallTalk-80 ist ein völlig reflektierendes System, das in SmallTalk-80 implementiert ist. SmallTalk-80 liefert sowohl strukturelle als auch rechnerische Reflexion. SmallTalk ist ein strukturell reflektierendes System, das Struktur durch SmallTalk-80-Objekte definiert wird. Die Klassen und Methoden Das definiert das System auch Objekte und vollständig Teil des Systems, das sie definieren. Der SmallTalk Compiler kompiliert Textquellcode in Methodenobjekte, typischerweise Instanzen von KompiledMethod
. Diese werden zu Klassen hinzugefügt, indem sie sie im Methodenwörterbuch einer Klasse aufbewahren. Der Teil der Klassenhierarchie, der Klassen definiert, kann dem System neue Klassen hinzufügen. Das System wird erweitert, indem SmallTalk-80-Code ausgeführt wird, der Klassen und Methoden erstellt oder definiert. Auf diese Weise ist ein SmallTalk-80-System ein "lebendes" System, das sich zur Laufzeit ausdehnt.
Da die Klassen Objekte sind, können ihnen Fragen gestellt werden, wie z. B. "Welche Methoden implementieren Sie?" oder "Welche Felder/Slots/Instanzvariablen definieren Sie?". So können Objekte leicht inspiziert, kopiert werden (DE)serialisiert und so weiter mit generischer Code, der für jedes Objekt im System gilt.[23]
SmallTalk-80 bietet auch eine rechnerische Reflexion, die Fähigkeit, den Rechenzustand des Systems zu beobachten. In Sprachen, die aus dem ursprünglichen SmallTalk-80 abgeleitet wurden, ist die aktuelle Aktivierung einer Methode als Objekt zugänglich, die über einen Pseudo-Variable (eines der sechs reservierten Wörter) benannt wurde. Dieser Kontext
. Durch Senden von Nachrichten an Dieser Kontext
Eine Methodeaktivierung kann Fragen wie "Wer diese Nachricht an mich gesendet" stellen. Diese Einrichtungen ermöglichen die Implementierung Co-Routinen oder Prolog-artig zurückverfolgt, ohne die virtuelle Maschine zu modifizieren. Das Ausnahmesystem wird mit dieser Einrichtung implementiert. Eine der interessanteren Verwendungszwecke ist in der Strand Web Framework, das den Programmierer entlastet, mit der Komplexität der Rückbutton eines Webbrowsers zu handhaben, indem sie Kontinuationen für jede bearbeitete Seite speichert und zwischen ihnen als Benutzer auf einer Website wechselt. Das Programmieren des Webservers mit Seaside kann dann mit einem konventionelleren Programmierstil durchgeführt werden.[24]
Ein Beispiel dafür, wie SmallTalk Reflexion verwenden kann, ist der Mechanismus zum Umgang mit Fehlern. Wenn ein Objekt eine Nachricht gesendet wird, die es nicht implementiert, sendet die virtuelle Maschine das Objekt das versteht nicht:
Nachricht mit a Verdinglichung der Nachricht als Argument. Die Nachricht (ein anderes Objekt, eine Instanz von Nachricht
) enthält den Selektor der Nachricht und eine Array
seiner Argumente. In einem interaktiven SmallTalk -System die Standardimplementierung von versteht nicht:
ist eines, das ein Fehlerfenster (einen Notifier) öffnet, der den Fehler dem Benutzer meldet. Durch diese und die reflektierenden Einrichtungen kann der Benutzer den Kontext untersuchen, in dem der Fehler aufgetreten ist, den beleidigenden Code neu definieren und alle innerhalb des Systems unter Verwendung der reflektierenden Einrichtungen von SmallTalk-80 fortgesetzt werden.[25][26]
Durch das Erstellen einer Klasse, die versteht (implementiert), versteht man nur nicht: Man kann eine Instanz erstellen, die jede Nachricht, die über IHS über IHS gesendet wird, nicht verstärkt: Methode. Solche Fälle werden als transparente Proxys bezeichnet.[27] Solche Proxys können dann verwendet werden, um eine Reihe von Einrichtungen wie verteiltem SmallTalk zu implementieren, bei dem Nachrichten zwischen mehreren SmallTalk -Systemen, Datenbankschnittstellen, an denen Objekte transparent aus einer Datenbank herausgegeben werden, ausgetauscht werden. Versprechenusw. Das Design von verteilten SmallTalk beeinflusste Systeme als Corba.
Syntax
Smalltalk-80 Syntax ist eher minimalistisch, basierend nur auf einer Handvoll Erklärungen und zurückhaltender Wörter. Tatsächlich sind nur sechs "Schlüsselwörter" in SmallTalk reserviert: Stimmt
, FALSCH
, Null
, selbst
, super
, und Dieser Kontext
. Diese werden ordnungsgemäß bezeichnet Pseudo-Variablen, Identifikatoren, die die Regeln für variable Kennungen befolgen, aber Bindungen bezeichnen, die sich ein Programmierer nicht ändern kann. Das Stimmt
, FALSCH
, und Null
Pseudo-Variablen sind Singleton Instanzen. selbst
und super
Siehe den Empfänger einer Nachricht innerhalb einer Methode, die als Antwort auf diese Nachricht aktiviert ist, aber an sendet an super
werden in der Superklasse der definierenden Klasse der Methode und nicht in der Klasse des Empfängers nachgeschlagen, wodurch Methoden in Unterklassen in Superklassen gleichermaßen gleichermaßen aufgerufen werden können. Dieser Kontext
bezieht sich auf den aktuellen Aktivierungsdatensatz. Die einzigen integrierten Sprachkonstrukte sind Nachrichtensendungen, Zuordnung, Methodenrückgabe und wörtliche Syntax für einige Objekte. Die Standard -SmallTalk -Syntax von Kindern als Sprache für Kinder aller Altersgruppen verwendet Interpunktion eher wie Englisch als auch die Mainstream -Codierungssprachen. Der Rest der Sprache, einschließlich Kontrollstrukturen für die bedingte Bewertung und Iteration, wird neben den integrierten Konstrukten durch die Standard-SmallTalk-Klassenbibliothek implementiert. (Aus Leistungsgründen können Implementierungen einige dieser Nachrichten als besondere dieser Nachrichten erkennen und behandeln. Dies ist jedoch nur eine Optimierung und wird nicht in die Sprachsyntax verdrahtet.)
Das Sprichwort, das "SmallTalk -Syntax passt Postkarte"Bezieht sich auf einen Code -Snippet von Ralph Johnsonalle grundlegenden Standard -syntaktischen Elemente von Methoden nachweisen:[28][29]
BeispielWithNumber: x | y | Stimmt & FALSCH nicht & (Null isnil) Iffalse: [selbst Halt]. y : = selbst Größe + super Größe. #($ a #a 'a' 1 1.0) tun: [ :jeder | Transkript Show: (jeder Klasse Name); Show: '' ']. ^x < y
Literale
Die folgenden Beispiele veranschaulichen die häufigsten Objekte, die als wörtliche Werte in SmallTalk-80-Methoden geschrieben werden können.
Zahlen. Die folgende Liste zeigt einige der Möglichkeiten.
42 -42 123.45 1.2345e2 2R10010010 16Ra000
Die letzten beiden Einträge sind eine binäre bzw. eine hexadezimale Zahl. Die Zahl vor dem 'r' ist die Radix oder Basis. Die Basis muss keine Kraft von zwei sein; Zum Beispiel ist 36RSmallTalk eine gültige Zahl von 80738163270632 Decimal.
Charaktere werden mit einem Dollar -Schild geschrieben:
$ A
Saiten sind Sequenzen von Zeichen, die in einzelnen Zitaten eingeschlossen sind:
'Hallo Welt!'
Um ein Zitat in eine Zeichenfolge aufzunehmen, entgehen Sie es mit einem zweiten Zitat:
"Ich sagte:" Hallo, Welt! "
Doppelte Zitate müssen nicht entkommen, da einzelne Zitate eine Zeichenfolge abgrenzen:
'Ich sagte: "Hallo, Welt!" zu ihnen.'
Zwei gleiche Saiten (Zeichenfolgen sind gleich, wenn sie dieselben Zeichen enthalten) können unterschiedliche Objekte sein, die sich an verschiedenen Stellen im Speicher befinden. Neben Strings hat SmallTalk eine Klasse von Zeichensequenzobjekten, die als Symbol bezeichnet werden. Symbole sind garantiert einzigartig - es kann keine zwei gleiche Symbole geben, die unterschiedliche Objekte sind. Aus diesem Grund sind Symbole sehr billig zu vergleichen und werden häufig für Sprachartefakte wie Nachrichtenauswahlern verwendet (siehe unten).
Symbole werden als # gefolgt von a geschrieben Saitenliteral. Zum Beispiel:
#"Foo"
Wenn die Sequenz keine Whitespace- oder Zeichenzeichen enthält, kann dies auch geschrieben werden:
#foo
Arrays:
#(1 2 3 4)
Definiert eine Reihe von vier Ganzzahlen.
Viele Implementierungen unterstützen die folgende wörtliche Syntax für Bytearrays:
#[1 2 3 4]
definiert einen Bytearray von vier Ganzzahlen.
Und zuletzt nicht zuletzt Blöcke (Anonyme Funktion Literale)
[... Etwas Smalltalk Code...]
Blöcke werden im Text weiter detailliert erläutert.
Viele SmallTalk -Dialekte implementieren zusätzliche Syntaxe für andere Objekte, aber die oben genannten sind die von allen unterstützten Grundlagen.
Variable Erklärungen
Die beiden Arten von Variablen, die üblicherweise in SmallTalk verwendet werden, sind Instanzvariablen und temporäre Variablen. Andere Variablen und verwandte Terminologie hängen von der jeweiligen Implementierung ab. Zum Beispiel, Visualworks Hat klassenfreie Variablen und Namespace freigegebene Variablen Quietschen und viele andere Implementierungen verfügen über Klassenvariablen, Poolvariablen und globale Variablen.
Temporäre variable Deklarationen in Smalltalk sind Variablen, die in einer Methode deklariert sind (siehe unten). Sie werden am oberen Rand der Methode als Namen von Räumen getrennt und durch vertikale Balken eingeschlossen. Zum Beispiel:
| Index |
deklariert eine temporäre Variable mit dem Namen Index, die zunächst den Wert enthält Null
.
Mehrere Variablen können in einem Satz von Balken deklariert werden:
| Indexvokale |
deklariert zwei Variablen: Index und Vokale. Alle Variablen werden initialisiert. Variablen werden auf NIL initialisiert, mit Ausnahme der indizierten Variablen von Zeichenfolgen, die auf das Nullzeichen oder die Bytearrays initialisiert werden, die auf 0 initialisiert werden.
Abtretung
Eine Variable wird ein Wert über die 'zugewiesen: =
' Syntax. So:
Vokale : = "Aeiou"
Weist die Zeichenfolge zu "Aeiou"
zu den früher deklarierten Vokalen variabel. Die Zeichenfolge ist ein Objekt (eine Abfolge von Zeichen zwischen einzelnen Zitaten ist die Syntax für buchstäbliche Zeichenfolgen), die vom Compiler zum Kompilierungszeit erstellt wurde.
Im ursprünglichen Parc Place-Bild erschien der Glyphe des Unterstrichzeichens ⟨_⟩ als linksgerichteter Pfeil ⟨←⟩ (wie in der Version von 1963 der 1963 ASCII Code). SmallTalk akzeptierte dieses linke Wut ursprünglich als der einzige Zuordnungsbetreiber. Ein moderner Code enthält immer noch, wie es zu unterstreichen, als Aufgaben zu fungieren und zu dieser ursprünglichen Verwendung zurück zu hören. Die meisten modernen SmallTalk-Implementierungen akzeptieren entweder die Unterstrich- oder die Syntax für Dickdarm-Gleichungen.
Mitteilungen
Die Botschaft ist das grundlegendste Sprachkonstrukt in SmallTalk. Auch Kontrollstrukturen werden als implementiert als Nachricht sendet. Smalltalk nimmt standardmäßig a Dynamischer Versand und einzelner Versand Strategie (im Gegensatz zu Mehrfachversand, verwendet von einigen anderen objektorientierten Sprachen).
Das folgende Beispiel sendet die Meldung 'Faktorial' auf Nummer 42:
42 Fakultät
In dieser Situation wird 42 als Nachricht bezeichnet Empfänger, während "faktorial" die Nachricht ist Wähler. Der Empfänger antwortet auf die Nachricht, indem er einen Wert zurückgibt (vermutlich in diesem Fall der Fakultät von 42). Unter anderem kann das Ergebnis der Nachricht einer Variablen zugewiesen werden:
ARATHERBIGNUMBER : = 42 Fakultät
"Faktorial" oben ist das, was als als genannt wird Unäre Nachricht Weil nur ein Objekt, der Empfänger, beteiligt ist. Nachrichten können zusätzliche Objekte als tragen Argumente, folgendermaßen:
2 erhoben: 4
In diesem Ausdruck sind zwei Objekte beteiligt: 2 als Empfänger und 4 als Nachrichtenargument. Das Nachrichtenergebnis oder im Smalltalk -Sprachgebrauch, die Antwort soll 16 sein. Solche Nachrichten werden genannt Schlüsselwortmeldungen. Eine Nachricht kann mehr Argumente unter Verwendung der folgenden Syntax haben:
'Hallo Welt' Index von: $ o beginnt um: 6
Dies beantwortet den Index des Zeichens 'o' in der Empfängerzeichenfolge, startet die Suche aus Index 6. Der Selektor dieser Nachricht lautet "IndexOf: startat:", bestehend aus zwei Teilen oder Schlüsselwörter.
Eine solche Verschachtelung von Schlüsselwörtern und Argumenten soll die Lesbarkeit von Code verbessern, da Argumente durch ihre vorhergehenden Schlüsselwörter erklärt werden. Beispielsweise kann ein Ausdruck zum Erstellen eines Rechtecks mit einer C ++-oder einer Java-ähnlichen Syntax geschrieben werden wie bei:
Neu Rechteck(100, 200);
Es ist unklar, welches Argument welches ist. Im Gegensatz dazu würde dieser Code in SmallTalk als:
Rechteck Breite: 100 Höhe: 200
Der Empfänger ist in diesem Fall "Rechteck", eine Klasse, und die Antwort wird eine neue Instanz der Klasse mit der angegebenen Breite und Höhe sein.
Schließlich können die meisten speziellen (nicht alphabetischen) Zeichen als sogenannte verwendet werden Binäre Nachrichten. Diese ermöglichen es mathematischer und logischer Operatoren, in ihrer traditionellen Form geschrieben zu werden:
3 + 4
Dies sendet die Nachricht "+" an den Empfänger 3, wobei 4 als Argument bestanden wird (die Antwort wird 7 sein). Ähnlich,
3 > 4
ist die Nachricht ">" an 3 mit Argument 4 gesendet (die Antwort wird falsch sein).
Beachten Sie, dass die SmallTalk-80-Sprache selbst nicht die Bedeutung dieser Betreiber impliziert. Das Ergebnis des oben genannten wird nur dadurch definiert, wie der Empfänger der Nachricht (in diesem Fall eine Zahleninstanz) auf Nachrichten "+" und ">" reagiert.
Ein Nebeneffekt dieses Mechanismus ist Bedienerüberlastung. Eine Nachricht ">" kann auch von anderen Objekten verstanden werden, sodass die Verwendung von Ausdrücken der Form "a> b" sie vergleichen kann.
Ausdrücke
Ein Ausdruck kann mehrere Nachrichten senden. In diesem Fall werden Ausdrücke nach einer einfachen Vorrangreihenfolge analysiert. Unäre Nachrichten haben den höchsten Vorrang, gefolgt von Binärnachrichten, gefolgt von Schlüsselwortmeldungen. Zum Beispiel:
3 Fakultät + 4 Fakultät zwischen: 10 und: 100
wird wie folgt bewertet:
- 3 empfängt die Meldung "Fakultät" und Antworten 6
- 4 empfängt die Nachricht "faktorial" und antwortet 24
- 6 empfängt die Nachricht "+" mit 24 als Argument und antwortet 30
- 30 empfängt die Nachricht "zwischen: und:" mit 10 und 100 als Argumente und Antworten wahr
Die Antwort der letzten gesendeten Nachricht ist das Ergebnis des gesamten Ausdrucks.
Klammern können bei Bedarf die Reihenfolge der Bewertung ändern. Zum Beispiel,
(3 Fakultät + 4) Fakultät zwischen: 10 und: 100
Ändert die Bedeutung so, dass der Ausdruck "3 faktorial + 4" zuerst berechnet wird. 10. Das erhält dann die zweite "faktorielle" Nachricht, wobei 3628800 erzielt wird.
Beachten Sie, dass die Bedeutung von Binärnachrichten nicht in die SmallTalk-80-Syntax verdrahtet wird, alle von ihnen als gleichen Vorrang vorliegen und einfach von links nach rechts bewertet werden. Aus diesem Grund kann sich die Bedeutung von SmallTalk -Ausdrücken unter Verwendung von Binärnachrichten von ihrer "traditionellen" Interpretation unterscheiden:
3 + 4 * 5
wird als "(3 + 4) * 5" bewertet und erzeugt 35. Um die erwartete Antwort von 23 zu erhalten, muss Klammern verwendet werden, um die Reihenfolge der Operationen explizit zu definieren:
3 + (4 * 5))
Unäre Nachrichten können sein angekettet Indem Sie sie nacheinander schreiben:
3 Fakultät Fakultät Protokoll
Dies sendet "faktorial" an 3, dann "faktorial" an das Ergebnis (6), dann "Protokoll" zum Ergebnis (720) und erzeugt das Ergebnis 2.85733.
Eine Reihe von Ausdrücken kann wie im folgenden (hypothetischen) Beispiel geschrieben werden, das jeweils durch einen Zeitraum getrennt ist. In diesem Beispiel wird zuerst eine neue Instanz des Klassenfensters erstellt, es in einer Variablen gespeichert und dann zwei Nachrichten an sie sendet.
| Fenster | Fenster : = Fenster Neu. Fenster Etikett: 'Hallo'. Fenster offen
Wenn eine Reihe von Nachrichten wie im obigen Beispiel an denselben Empfänger gesendet wird, können sie auch als geschrieben werden Kaskade mit einzelnen Nachrichten, die durch Semikolons getrennt sind:
Fenster Neu Etikett: 'Hallo'; offen
Dieses Umschreiben des früheren Beispiels als einzelner Ausdruck vermeidet die Notwendigkeit, das neue Fenster in einer vorübergehenden Variablen zu speichern. Nach den üblichen Vorrangregeln wird zuerst die Unary -Nachricht "neu" gesendet und dann "Label:" und "Open" an die Antwort von "neu" gesendet.
Codeblöcke
Ein Codeblock (eine anonyme Funktion) kann als wörtlicher Wert ausgedrückt werden (was ein Objekt ist, da alle Werte Objekte sind). Dies wird mit quadratischen Klammern erreicht:
[ :Parameter | <Botschaft-Ausdrücke> ]
Wo : Parameter ist die Liste der Parameter, die der Code benötigen kann. Dies bedeutet, dass der SmallTalk -Code:
[:x | x + 1]
kann verstanden werden als:
oder in lambda ausgedrückt als:
und
[:x | x + 1] Wert: 3
kann bewertet werden als
Oder in Lambda als:
Das resultierende Blockobjekt kann a bilden Schließung: Es kann jederzeit auf die Variablen seiner umschließenden lexikalischen Bereiche zugreifen. Blöcke sind erstklassige Objekte.
Blöcke können ausgeführt werden, indem sie ihnen das senden Wert Meldung (zusammengesetzte Variationen existieren, um Parameter für den Block bereitzustellen, z. B. 'Wert: Wert:' und 'ValueWithargumente:').
Die wörtliche Darstellung von Blöcken war eine Innovation, die es einerseits ermöglichte, bestimmter Code wesentlich lesbarer zu sein. Es ermöglichte es, dass Algorithmen eine klare und präzise Art und Weise codiert werden. Code, der normalerweise in einigen Sprachen mit Schleifen geschrieben wird, kann mit Blöcken, manchmal in einer einzigen Zeile, präzise in SmallTalk geschrieben werden. Noch wichtiger ist jedoch, dass Blöcke die Kontrollstruktur mit Nachrichten und ausdrücklichen PolymorphismusDa Blöcke Berechnung und Polymorphismus verschieben können, können Alternativen ausgewählt werden. Also wird in SmallTalk, wenn es ist, geschrieben und implementiert als
Expr Wenn wahr: [Aussagen zu auswerten wenn Expr] Iffalse: [Aussagen zu auswerten wenn nicht Expr]
Wahre Methoden zur Bewertung
Wenn wahr: Truealternative Block Iffalse: FALEALTERNATIONBLOCK
^TruealternativeBlock -Wert
Falsche Methoden zur Bewertung
Wenn wahr: Truealternative Block Iffalse: FALEALTERNATIONBLOCK
^FALEALTERNATIONBLOCK -Wert
positiveamounts : = Allamounts auswählen: [:ein Betrag | ein Betrag ispositiv]
Beachten Sie, dass dies mit dem zusammenhängt mit Funktionelle Programmierung, wobei Berechnungsmuster (hier Auswahl) sind abstrahiert hinein Funktionen höherer Ordnung. Zum Beispiel die Nachricht auswählen: Auf einer Sammlung entspricht der Funktion höherer Ordnung Filter auf ein angemessenes Functor.[30]
Kontrollstrukturen
Kontrollstrukturen haben keine spezielle Syntax in SmallTalk. Sie werden stattdessen als Nachrichten an Objekte implementiert. Beispielsweise wird die bedingte Ausführung durch Senden der Nachricht IFTUE implementiert: an ein boolescher Objekt, über das Ausführung des Codeblocks, wenn der Boolesche Empfänger wahr ist, als Argument übergeben. Die beiden Unterklassen von boolean implementieren beide IFTUE:, wobei die Implementierung in Unterklasse True immer den Block bewertet, und die Implementierung in Subklasse Falsch bewertet den Block niemals.
Der folgende Code zeigt dies:
Ergebnis : = a > b Wenn wahr:[ "größer" ] Iffalse:[ "weniger oder gleich" ]
Blöcke werden auch verwendet, um benutzerdefinierte Steuerungsstrukturen, Aufzähler, Besucher und Besucher zu implementieren, Ausnahmebehandlung, steckbares Verhalten und viele andere Muster. Zum Beispiel:
| Astring -Vokale | ein Faden : = "Dies ist eine Zeichenfolge". Vokale : = ein Faden auswählen: [:ein Charakter | ein Charakter Isvowel].
In der letzten Zeile wird die Zeichenfolge gesendet. SELECT SELECT: Mit einem Argument, das ein Codeblock -Literal ist. Der Codeblock -Literal wird als Prädikatfunktion verwendet, das nur dann wahr beantworten sollte, wenn ein Element der Zeichenfolge in die Sammlung von Zeichen enthalten sein sollte, die den Test erfüllen, der durch den Codeblock dargestellt wird, der das Argument für das "SELECT:" SELECT: " Botschaft.
Ein String -Objekt antwortet auf die "SELECT:" -Rehnung durch Iterien durch seine Mitglieder (durch Senden der Nachricht "do:") und bewertet den Auswahlblock ("Ablock") einmal mit jedem Zeichen, das es als Argument enthält. Bei der Bewertung (durch Senden der Nachricht "Wert: jeweils"), der Auswahlblock (auf den vom Parameter "Ablock" verwiesen und durch den Block wörtlichen "[: acharacter | acharacter isvowel]") ") beantwortet ein Boolescher, der ist, was ist, was ist, ist, was ist ist dann gesendet "ifTrue:". Wenn der Boolesche das Objekt wahr ist, wird das Zeichen einer Zeichenfolge hinzugefügt, die zurückgegeben wird. Da die Methode "SELECT:" in der abstrakten Klassensammlung definiert ist, kann sie auch wie folgt verwendet werden:
| Rechtecke enttäuschen Kollisionen | Rechtecke : = OrderedCollection mit: (Rechteck links: 0 Rechts: 10 oben: 100 Unterseite: 200)) mit: (Rechteck links: 10 Rechts: 10 oben: 110 Unterseite: 210). ein Punkt : = Punkt x: 20 y: 20. Kollisionen : = Rechtecke auswählen: [:Arect | Arect enthält Punkt: ein Punkt].
Der Ausnahmebehandlungsmechanismus verwendet Blöcke als Handler (ähnlich der Ausnahmehandhabung im Clos-Stil):
[ etwas Betrieb ] an:Fehler tun:[:ex | Handler-Code ex Rückkehr ]
Das "Ex" -Argument des Ausnahmehandlers bietet Zugriff auf den Zustand des suspendierten Betrieb "," ex lehnte "," ex neu starten "oder" ex return ").
Klassen
Dies ist eine Aktienklassendefinition:[31]
Objekt Unterklasse: #MessagePublisher InstanceVariablenamen: '' ' classvariablenamen: '' ' Pooldictionaries: '' ' Kategorie: "SmallTalk -Beispiele"
Oft wird der größte Teil dieser Definition durch die Umwelt ausgefüllt. Beachten Sie, dass dies eine Nachricht an die ist Objekt
Klasse zum Erstellen einer Unterklasse genannt MessagePublisher
. Mit anderen Worten: Klassen sind erstklassige Objekte In SmallTalk, das Nachrichten genauso wie jedes andere Objekt empfangen und zum Ausführungszeit dynamisch erstellt werden kann.
Methoden
Wenn ein Objekt eine Nachricht empfängt, wird eine Methode, die mit dem Nachrichtennamen entspricht, aufgerufen. Der folgende Code definiert eine Veröffentlichung einer Methode und definiert daher, was passieren wird, wenn dieses Objekt die "Veröffentlichung" -Meldung empfängt.
veröffentlichen Transkript Show: 'Hallo Welt!'
Die folgende Methode zeigt, dass mehrere Argumente empfangen und ein Wert zurückgegeben werden:
Quadmultiply: I1 und: I2 "Diese Methode multipliziert die angegebenen Zahlen voneinander und das Ergebnis mit 4." | Mul | Mul : = I1 * I2. ^Mul * 4
Der Name der Methode ist #quadmultiply: und:
. Der Rückgabewert wird mit dem angegeben ^
Operator.
Beachten Sie, dass Objekte für die dynamische Bestimmung zur Laufzeit verantwortlich sind, welche Methode als Reaktion auf eine Nachricht ausgeführt werden soll - während dies in vielen Sprachen (manchmal oder sogar immer) statisch zum Kompilierungszeit ermittelt wird.
Instantiating Kurse
Der folgende Code:
MessagePublisher Neu
Erstellt (und gibt zurück) eine neue Instanz der MessagePublisher -Klasse. Dies wird normalerweise einer Variablen zugeordnet:
Verleger : = MessagePublisher Neu
Es ist jedoch auch möglich, eine Nachricht an ein vorübergehendes, anonymer Objekt zu senden:
MessagePublisher Neu veröffentlichen
Hallo Weltbeispiel
Das Hallo Weltprogramm wird von praktisch allen Texten zu neuen Programmiersprachen verwendet, als das erste Programm, das die grundlegendste Syntax und Umgebung der Sprache zeigt. Für SmallTalk ist das Programm extrem einfach zu schreiben. Der folgende Code, die Meldung "Show:" wird an das Objekt "Transkript" mit dem String Literal 'Hallo, Welt!' Gesendet. als Argument. Aufruf der "Show:" -Methode verursacht, dass die Zeichen ihres Arguments (die String buchstäbliche 'Hallo, Welt!') Im Fenster Transkript ("Terminal") angezeigt werden.
Transkript Show: 'Hallo Welt!'.
Beachten Sie, dass ein Transkriptionsfenster geöffnet werden müsste, um die Ergebnisse dieses Beispiels anzuzeigen.
Bildbasierte Persistenz
Die beliebtesten Programmiersysteme trennen den statischen Programmcode (in Form von Klassendefinitionen, Funktionen oder Verfahren) von Dynamic, oder Laufzeit, Programmstatus (wie Objekte oder andere Formen von Programmdaten). Sie laden den Programmcode, wenn ein Programm startet, und jeder vorherige Programmstatus muss explizit aus Konfigurationsdateien oder anderen Datenquellen nachgebildet werden. Alle Einstellungen Das Programm (und der Programmierer) speichern nicht explizit für jeden Neustart. Ein traditionelles Programm verliert auch jedes Mal, wenn ein Programm eine Datei, Beendet und Nachladen speichert. Dies verliert Details wie die Geschichte der Geschichte oder der Cursorposition. Bildbasierte Systeme erzwingen nicht, alles zu verlieren, nur weil ein Computer ausgeschaltet ist, oder ein Betriebssystem -Updates.
Viele SmallTalk -Systeme unterscheiden jedoch nicht zwischen Programmdaten (Objekten) und Code (Klassen). Tatsächlich sind Klassen Objekte. Daher speichern die meisten SmallTalk-Systeme den gesamten Programmstatus (einschließlich sowohl der Klassen- als auch der Nicht-Klassen-Objekte) in einem Bild Datei. Das Bild kann dann vom SmallTalk geladen werden virtuelle Maschine Um ein smalltalkähnliches System in einem vorherigen Zustand wiederherzustellen.[32] Dies wurde von Flex inspiriert, einer Sprache, die von erstellt wurde Alan Kay und beschrieben in seinem M.Sc. These.[33]
SmallTalk -Bilder sind ähnlich wie (neu startbar) Kernpolster und kann die gleiche Funktionalität wie Kern -Dumps liefern, wie z. B. verzögertes oder ferneres Debuggen mit vollem Zugriff auf den Programmstatus zum Zeitpunkt des Fehlers. Andere Sprachen, die Anwendungscode als Datenform modellieren, wie z. LispelnVerwenden Sie oft auch bildbasierte Persistenz. Diese Ausdauermethode ist für eine schnelle Entwicklung mächtig, da alle Entwicklungsinformationen (z. B. Bäume des Programms) gerettet werden, was das Debuggen erleichtert. Es hat jedoch auch schwerwiegende Nachteile als wahrer Persistenzmechanismus. Zum einen möchten Entwickler häufig implementierende Details ausblenden und sie nicht in einer Laufzeitumgebung zur Verfügung stellen. Aus Gründen der Legalität und Wartung führt jeder, damit jeder ein Programm zur Laufzeit ändern kann, unweigerlich Komplexität und potenzielle Fehler ein, die mit einem kompilierten System, das in der Laufzeitumgebung keinen Quellcode aufdeckt, nicht möglich wären. Auch wenn der Persistenzmechanismus einfach zu bedienen ist, fehlt ihm auch die wahren Persistenzfähigkeiten, die für die meisten Multi-User-Systeme erforderlich sind. Am offensichtlichsten ist die Möglichkeit, Transaktionen mit mehreren Benutzern durchzuführen, die parallel auf dieselbe Datenbank zugreifen.[34]
Zugangsniveau
Alles in SmallTalk-80 ist innerhalb eines laufenden Programms zur Änderung verfügbar. Dies bedeutet, dass zum Beispiel die Ide kann in einem laufenden System geändert werden, ohne es neu zu starten. In einigen Implementierungen die Syntax der Sprache oder der Müllsammlung Die Implementierung kann auch im laufenden Fliegen geändert werden. Sogar die Aussage wahr werden: falsch
ist in smalltalk gültig, obwohl es nicht empfohlen wird.
Just-in-Time-Zusammenstellung
SmallTalk -Programme werden normalerweise zusammengestellt Bytecode, was dann durch a interpretiert wird virtuelle Maschine oder dynamisch in maschinellen nativen Code übersetzt.
Liste der Implementierungen
OpenSmallTalk
OpenSmallTalk VM (OS VM) ist eine bemerkenswerte Implementierung des SmallTalk -Laufzeitläufers, auf dem viele moderne SmallTalk -Implementierungen basieren oder abgeleitet sind.[35] OS VM selbst ist transpiliert von einer Reihe von SmallTalk -Quellcode -Dateien (unter Verwendung einer Smalltalk -Untergruppe namens Slang) zu nativ C Sprache Quellcode (mithilfe eines Transpilers namens vmmaker),[36] Dies wird wiederum gegen eine bestimmte Plattform und Architektur der Hardware zusammengestellt, die praktisch plattformübergreifende Ausführung der SmallTalk-Bilder ermöglicht. Der Quellcode ist auf GitHub verfügbar und unter verteilt unter MIT -Lizenz. Die bekannten SmallTalk -Implementierungen basierend auf dem Betriebssystem VM sind:[37]
- Quietschen, der ursprüngliche Open Source SmallTalk, für den die OpenSmallTalk VM gebaut wurde[37]: 2
- Pharo SmallTalk, eine Open-Source plattformübergreifend Sprache
- Kutig-smalltalk, eine Open-Source-kleine, saubere und smalltalk-80-kompatible Gabel von Quietschen[38]
- Haver-SmallTalk Eine Erweiterung der Küche mit einem vollständigen Modulsystem
- Krocket VM, eine quietschbezogene SmallTalk-VM für Krocketprojekt
Andere
- Amber SmallTalk, läuft auf JavaScript Über Transpilation
- COCM hat zwei SmallTalk -Produkte: ObjectStudio, und Visualworks.
- Visual SmallTalk Enterpriseund Familie, einschließlich SmallTalk/V.
- SmallTalk/x, entwickelt von Claus Gittierer
- F-Skript, macOS-Nur-Implementierung im Jahr 2009 geschrieben
- Gemtalk -Systeme, Edelstein/s
- Gnu smalltalk, kopflos (mangelnde GUI) Implementierung von SmallTalk
- STEPHTALK, Gn .pep Scripting Framework verwendet eine SmallTalk -Sprache auf einem Ziel c Laufzeit
- Visuelle Smalltalk
- Rosetta Smalltalk, entwickelt von Scott Warren 1979 und kündigte als Patrone für den exidischen Zauberer an, wurde aber nie veröffentlicht[39]
- Wege Plattform (VA SmallTalk), entwickelt von Instantiations, Inc.
- Little SmallTalk
- Objektkunst, Dolphin Smalltalk
- Objektverbindung, Smalltalk mt SmallTalk für Fenster
- Tasche SmallTalk, läuft mit Palm Pilot
- Smallj, ein Open Source SmallTalk basierend auf Java, abgeleitet von Kleine Welt
- ETOYS, ein visuelles Programmiersystem zum Lernen
- Kratzen Ein visuelles Programmiersystem (nur Versionen vor 2.0 sind SmallTalk-basiert)
- StrongTalkEine Open-Source-Version (seit 2006), nur eine Windows-Version, bietet eine optionale starke Eingabe. ursprünglich erstellt bei Sun Microsystem Labs.[40]
- TRUFFLESQUEAK, eine Squeak-/SmallTalk-VM- und Polyglot-Programmierumgebung für das Graalvm (mehr Graalvm-basierte SmallTalk-Implementierungen finden Sie hier)
JavaScript VM
- Pharojs eine Open-Source Transpiler Von SmallTalk nach JavaScript, um die zu erweitern Pharo Umgebung
- Squeakjs Ein OpenSmallTalk-kompatibler VM für das Web, wird auch ältere Squeak-Apps wie ausgeführt ETOYS oder Kratzen
Siehe auch
Verweise
- ^ "Alto I Schematik" (PDF). Bitsavers. p. 54. Abgerufen 21. Juli 2016.
- ^ "Geschichte von Computern und Computer, Geburt des modernen Computers, PC, Xerox Alto". Abgerufen 2016-04-19.
- ^ a b c d e f g h Kay, Alan; Ram, Stefan (2003-07-23). "E-Mail von 2003-07-23". Dr. Alan Kay über die Bedeutung von 'objektorientiertem Programmieren'. Abgerufen 2009-01-03.
- ^ a b c d Kay, Alan. "Die frühe Geschichte von SmallTalk". Abgerufen 2007-09-13.
- ^ "Ansi SmallTalk Standard". SmallTalk.org. 2004. archiviert von das Original am 2006-02-16. Abgerufen 2021-03-02.
- ^ "Stack Overflow Developer Survey 2017".
- ^ "Stack Overflow Developer Survey 2018".
- ^ "Versionen". SmallTalk.org. Archiviert von das Original Am 2015-09-08. Abgerufen 2007-09-13.
- ^ "Ansi SmallTalk Standard". SmallTalk.org. Archiviert von das Original Am 2015-09-07. Abgerufen 2007-09-13.
- ^ "Hobbes". Archiviert von das Original am 19. April 2003.
- ^ "Geschichte". Möwensoftware. Archiviert von das Original Am 2002-08-06. Abgerufen 2007-09-13.
- ^ "Visualage SmallTalk Transition FAQ".
- ^ Die Simula-Sprache war auch objektorientiert und wurde als Einfluss auf SmallTalk vorausgegangen (und es wurde als Einfluss darauf anerkannt), aber es war eine Simulationssprache, keine allgemeine Programmiersprache.
- ^ Kanone, Howard. "Aromen ein nicht-hierarchischer Ansatz zur objektorientierten Programmierung" (PDF). SoftwarePeservation.org. Abgerufen 17. Dezember 2013.
- ^ "Über Ruby". Ruby-Lang.org. Abgerufen 17. Dezember 2013.
- ^ "Woher kam Refactoring?". Sourcemaking.com. Abgerufen 17. Dezember 2013.
- ^ "DARPA / ARPA". LivingInternet.com. Abgerufen 16. Dezember 2013.
Um diesem Bedarf zu erfüllen, richtete ARPA das IPTO 1962 mit einem Mandat ein, ein überlebensfähiges Computernetzwerk zu bauen, um die Hauptcomputer des DOD im Pentagon, im Cheyenne Mountain und in SAC HQ zu verbinden.
- ^ "Engelbars Rolle bei der frühen Computernetzwerk". douggengelbart.org. Abgerufen 17. Dezember 2013.
- ^ Krasner, Glen; Papst, Stephen (August bis September 1988). "Ein Kochbuch zur Verwendung des Model-View-Controller-Benutzeroberflächen-Paradigmas in SmallTalk -80". Zeitschrift für objektorientierte Programmierung.
- ^ "Unser Einfluss". cincomsmallTalk.com. Abgerufen 16. Dezember 2013.
- ^ Kay, Alan (10. Oktober 1998). "Prototypen gegen Klassen (E-Mail auf Squeak-Liste)".
- ^ Goldberg, Adele; Robson, David (1989). Smalltalk-80 die Sprache. Addison Wesley. S. 31, 75–89. ISBN 0-201-13688-0.
- ^ Clark, A.N. (1997). "Metaklasse und Reflexion in SmallTalk". Citeseerx 10.1.1.33.5755.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ Dukasse, Stéphane; Lienhard, Adrian; Renggli, Lukas. "Seaside - Ein multiple Steuerfluss -Webanwendungs -Framework" (PDF). scg.unibe.ch. Software Composition Group Institut Fur Informatik und Angewandte Mathematik Universität Bern, Schweiz. Abgerufen 16. Dezember 2013.
- ^ Foote, Brian; Johnson, Ralph (1.–6. Oktober 1989). "Reflektierende Einrichtungen in SmallTalk-80". Oopsla '89: 327–335. doi:10.1145/74877.74911. ISBN 0897913337. S2CID 14207536. Abgerufen 16. Dezember 2013.
- ^ Smith, Brian C (1982-01-01). "Verfahrensreflexion in Programmiersprachen". MIT Technischer Bericht (MIT-LCS-TR-272). Abgerufen 16. Dezember 2013.
- ^ Denker, Marcus; Peck, Mariano Martinez; Bouraqadi, Noury; Fabresse, Luc; Dukasse, Stéphane. "Effiziente Proxys in SmallTalk" (PDF).
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ http://sdmeta.gforge.inria.fr/programmez/ontheweb/art2-eng-aminimalistsyntax.pdf[Bare URL PDF]
- ^ http://scg.unibe.ch/archive/lectures/ducasselektures/duca00y1smallTalklectures.pdf[Bare URL PDF]
- ^ Goldberg, Adele; Robson, David (1989). Smalltalk-80 die Sprache. Addison Wesley. S. 17–37. ISBN 0-201-13688-0.
- ^ Goldberg, Adele; Robson, David (1989). Smalltalk-80 die Sprache. Addison Wesley. S. 39–53. ISBN 0-201-13688-0.
- ^ "Bildbasierte Persistenz". book.seaside.st. Abgerufen 17. Dezember 2013.
- ^ Kay, Allen (1968). "Flex - Eine flexible erweiterbare Sprache". MSC -These der Universität von Utah.
- ^ Fowler, Martin. "Speicherbild". Martinfowler.com. Abgerufen 17. Dezember 2013.
- ^ "OpenSmallTalk-VM", OpenSmallTalk, Git Hub, 2020-11-03, abgerufen 2020-11-08
- ^ "Slang". Quietschen. Abgerufen 2020-11-08.
- ^ a b Mirand, Eliot; Bera, Clément; Gonzalez Boix, Elisa; Dan, Ingalls (8. Oktober 2018). "Zwei Jahrzehnte der Smalltalk -VM -Entwicklung: Live -VM -Entwicklung durch Simulationstool" (PDF).
{{}}
: CS1 Wartung: URL-Status (Link) - ^ Inhaltsverzeichnis, Cuis Smalltalk, 2021-11-24, abgerufen 2021-11-25
- ^ Scott Warren (1979). Eine für die Öffentlichkeit verlorene Sprache- Rosetta SmallTalk Flap, 1979.
- ^ "StrongTalk: Ein Hochleistungs-Open-Source-SmallTalk mit einem optionalen Typsystem". Abgerufen 2021-11-25.
Weitere Lektüre
- Goldberg, Adele (Dezember 1983). SmallTalk-80: Die interaktive Programmierumgebung. Addison-Wesley. ISBN 0-201-11372-4.
- Goldberg, Adele; Kay, Alan, eds. (März 1976). SmallTalk-72 Bedienungsanleitung (PDF). Palo Alto, Kalifornien: Xerox Palo Alto Research Center. Abgerufen 2011-11-11.
- Goldberg, Adele; Robson, David (Mai 1983). SmallTalk-80: Die Sprache und ihre Implementierung. Addison-Wesley. ISBN 0-201-11371-6.
- Goldberg, Adele; Robson, David (11. Januar 1989). SmallTalk 80: Die Sprache. Addison-Wesley. ISBN 0-201-13688-0.
- Kay, Alan C. (März 1993). "Die frühe Geschichte von SmallTalk" (PDF). ACM Sigplan nennt. ACM. 28 (3): 69–95. doi:10.1145/155360.155364.
- Krasner, Glen, hrsg. (August 1983). SmallTalk-80: Teile der Geschichte, Ratschläge. Addison-Wesley. ISBN 0-201-11669-3.
- Nierstrasz, Oscar; Dukasse, Stéphane; Pollet, Damien; Black, Andrew P. (2009-10-07). Quietschen mit Beispiel. Kehrsatz, Schweiz: Square Bracket Associates. ISBN 978-3-9523341-0-2.
- Nierstrasz, Oscar; Dukasse, Stéphane; Pollet, Damien; Black, Andrew P. (23. Februar 2010). Pharo mit Beispiel.Kehrsatz, Schweiz: Square Bracket Publishing. ISBN 978-3-9523341-4-0. Archiviert von das Original am 21. Oktober 2009.
- Winston, Patrick Henry (3. September 1997). Auf smalltalk.MIT, USA: Addison Wesley. ISBN 978-0201498271.
- Brauer, Johannes (2015). Programmieren von SmallTalk-Objektorientierung von Anfang an. Springer. ISBN 978-3-658-06823-3.
- "Sonderausgabe auf SmallTalk". Byte. McGraw-Hill. 6 (8).August 1981. Abgerufen 2013-10-18.
- Goldberg, Adele (August 1981). "Einführung des SmallTalk-80-Systems". Byte. McGraw-Hill. 6 (8). Abgerufen 2013-10-18.
- Ingalls, Dan (August 1981). "Designprinzipien hinter SmallTalk". Byte. McGraw-Hill. 6 (8). Abgerufen 2011-11-11.
- Tesler, Larry (August 1981). "Die SmallTalk -Umgebung". Byte. McGraw-Hill. 6 (8). Abgerufen 2016-05-02.
Externe Links
- Kostenlose Online -SmallTalk -Bücher
- Cuis SmallTalk
- Pharo SmallTalk
- Quietschen SmallTalk
- Cincom SmallTalk ObjectStudio
- Cincom SmallTalk Visualworks
- Dolphin Smalltalk
- Gnu smalltalk
- SmallTalk/x
- StrongTalk
- Amber SmallTalk
- Redline SmallTalk
- Scarlet SmallTalk
- Va SmallTalk
- Edelstein
- Glas (Edelstein, Linux, Apache, Meer und SmallTalk)
- Smalltalk mt
- SmallTalk-78 Online-Emulator
- OpenMallTalk Cross-Platform Virtual Machine für Squeak, Pharo, Küche und Newspeak
- Smalltalk-80 bluebook-Implementierungen in C ++: von dbanay und Rochus-Keller auf Github