Plausch

Plausch ist eine objektorientierte, dynamisch getippte, reflektierende Programmiersprache. Plausch wurde als die Sprache geschaffen, um die "neue Welt" zu unterstützen, veranschaulicht durch die "Symbiose des menschlichen Computers zu rechnen." Es wurde entworfen und teilweise für den Bildungsgebrauch, mehr für das Constructionist-Lernen, an Learning Research Group (LRG) von Xerox PARC von Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Scott Wallace und anderen während der 1970er Jahre geschaffen.

Die Sprache wurde zuerst allgemein als Plausch 80 veröffentlicht. Einem Plausch ähnliche Sprachen sind in der ständigen aktiven Entwicklung, und haben loyale Gemeinschaften von Benutzern um sie gesammelt. ANSI Plausch wurde 1998 bestätigt und vertritt die Standardversion des Plausches.

Geschichte

Es gibt eine Vielzahl von Plausch-Varianten. Das unqualifizierte Wort Plausch wird häufig verwendet, um den Plausch 80 Sprache, die erste Version anzuzeigen, die öffentlich verfügbar und geschaffen 1980 zu machen ist.

Plausch war das Produkt der Forschung, die von Alan Kay an Xerox Palo Alto Research Center (PARC) geführt ist; Alan Kay hat die meisten frühen Plausch-Versionen entworfen, die Dan Ingalls durchgeführt hat. Die erste Version, die als Plausch 71 bekannt ist, wurde von Ingalls an ein paar Morgen auf einer Wette geschaffen, dass eine Programmiersprache, die auf der Idee vom von Simula begeisterten Nachrichtenübergang gestützt ist, in "einer Seite des Codes durchgeführt werden konnte." Eine spätere für die Forschungsarbeit wirklich verwendete Variante ist jetzt als Plausch 72 bekannt und hat die Entwicklung des Schauspieler-Modells beeinflusst. Seine Syntax und Ausführungsmodell waren von modernen Plausch-Varianten sehr verschieden.

Nachdem bedeutende Revisionen, die einige Aspekte der Ausführungssemantik eingefroren haben, um Leistung (durch das Übernehmen eines Simula ähnlichen Klassenerbe-Modells der Ausführung), Plausch 76 zu gewinnen, geschaffen wurden. Dieses System hatte eine Entwicklungsumgebung, die die meisten jetzt vertrauten Werkzeuge einschließlich eines Klassenbibliothekscodebrowsers/Redakteurs zeigt. Plausch 80 hat metaclasses hinzugefügt, um zu helfen, aufrechtzuerhalten, "alles ist ein Gegenstand" (außer privaten Beispiel-Variablen) Paradigma durch das Verbinden von Eigenschaften und Verhalten mit individuellen Klassen und sogar Primitiven wie ganze Zahl und Boolean-Werte (zum Beispiel, um verschiedene Weisen zu unterstützen, Beispiele zu schaffen).

Plausch 80 war die erste Sprachvariante bereitgestellt außerhalb PARC, zuerst als Plausch 80 Version 1, die einer kleinen Anzahl von Unternehmen (Hewlett Packard, Apple Computer, Tektronix, und DEZ) und Universitäten (UC Berkeley) für die "gleichrangige Rezension" und Durchführung auf ihren Plattformen gegeben ist. Später (1983) wurde eine allgemeine Verfügbarkeitsdurchführung, die als Plausch 80 Version 2 bekannt ist, als ein Image (mit der Plattform unabhängige Datei mit Gegenstand-Definitionen) und eine virtuelle Maschinenspezifizierung veröffentlicht. ANSI Plausch ist die Standardsprache-Verweisung seit 1998 gewesen.

Zwei der zurzeit populären Plausch-Durchführungsvarianten sind Nachkommen von denjenigen ursprünglicher Plausch 80 Images. Quieken ist eine offene Quelldurchführung ist auf Plausch 80 Version 1 über den Apple Smalltalk zurückzuführen gewesen. VisualWorks wird aus Plausch aus 80 Version 2 über den Plausch 80 2.5 und ObjectWorks (beide Produkte von Systemen von ParcPlace, Xerox PARC Nebenprodukt-Gesellschaft abgeleitet, die gebildet ist, um Plausch zum Markt zu bringen). Als eine interessante Verbindung zwischen Generationen 2002 hat Vassili Bykov Hobbes, einen virtuellen Maschinenlaufen-Plausch 80 innerhalb von VisualWorks durchgeführt. (Dan Ingalls hat später Hobbes getragen, um Zu quieksen.)

Während des Endes der 1980er Jahre zur Mitte der 1990er Jahre wurden Plausch-Umgebungen — einschließlich der Unterstützung, Ausbildung und Erweiterungen — von zwei konkurrierenden Organisationen verkauft: ParcPlace Systems und Digitalk, das beides Kalifornien gestützt. Systeme von ParcPlace haben dazu geneigt, sich auf den Unix/Sun Mikrosystemmarkt zu konzentrieren, während sich Digitalk auf das auf Intel gegründete PC-Laufen Windows von Microsoft oder der OS/2 von IBM konzentriert hat. Beide Unternehmen haben sich angestrengt, Plausch-Hauptströmung wegen der wesentlichen Speicherbedürfnisse des Plausches, beschränkten Zeitverhaltens und anfänglichen Mangels an der unterstützten Konnektivität zu SQL-basierten Verwandtschaftsdatenbankservern zu nehmen. Während der hohe Preis des Plausches von ParcPlace seine Marktdurchdringung auf mitte-große und große kommerzielle Organisationen beschränkt hat, haben die Produkte von Digitalk am Anfang versucht, ein breiteres Publikum mit einem niedrigeren Preis zu erreichen. IBM hat am Anfang das Produkt von Digitalk unterstützt, aber ist dann in den Markt mit einem Plausch-Produkt 1995 genannt VisualAge/Smalltalk eingegangen. Staffelei hat Enfin in dieser Zeit auf Windows und OS/2 eingeführt. Enfin ist viel populärer in Europa geworden, weil IBM es DARIN Geschäfte vor ihrer Entwicklung von IBM Smalltalk (später VisualAge) eingeführt hat. Enfin wurde später durch Cincom Systeme erworben, und wird jetzt unter dem Namen ObjectStudio verkauft, und ist ein Teil des Cincom Plausch-Produktgefolges.

1995 haben sich ParcPlace und Digitalk in ParcPlace-Digitalk verschmolzen und haben dann 1997 als ObjectShare wiedergebrandmarkt, der in Irvine, Kalifornien gelegen ist. ObjectShare (NASDAQ: OBJS) wurde öffentlich bis 1999 getauscht, als er von der Liste abgesetzt und aufgelöst wurde. Das verschmolzene Unternehmen hat nie geschafft, eine wirksame Antwort nach Java betreffs der Marktpositionierung zu finden, und vor 1997 achteten seine Eigentümer, das Geschäft zu verkaufen. 1999 hat Seemöwe-Software ObjectShare javanisches Entwicklungslaboratorium (einschließlich des ursprünglichen Smalltalk/V und der Sehplausch-Entwicklungsmannschaft) erworben, und besitzt noch VisualSmalltalk, obwohl Weltvertriebsrechte für das Plausch-Produkt mit ObjectShare geblieben sind, der ihnen dann an Cincom verkauft hat. VisualWorks wurde an Cincom verkauft und ist jetzt ein Teil des Cincom Plausches. Cincom hat Plausch stark unterstützt, vielfache neue Versionen von VisualWorks und ObjectStudio jedes Jahr seit 1999 veröffentlichend.

Cincom, Edelstein und Gegenstand-Künste, plus andere Verkäufer setzen fort, Plausch-Umgebungen zu verkaufen. IBM hat 'Ende des life'd Plausches von VisualAge habend gegen Ende der 1990er Jahre, die entschieden sind, um Java zu unterstützen, und es wird von Instantiations, Inc. unterstützt, die das Produkt VA Plausch umbenannt und mehrere neue Versionen veröffentlicht hat. Die offene Quieken-Durchführung hat eine energische Gemeinschaft von Entwicklern einschließlich vieler von der ursprünglichen Plausch-Gemeinschaft, und ist kürzlich verwendet worden, um die Umgebung von Etoys auf dem OLPC-Projekt, einem Werkzeug zur Verfügung zu stellen, um zusammenarbeitendes Anwendungskrocket-Projekt und das Offene Kobalt virtuelle Weltanwendung zu entwickeln. GNU-Plausch ist eine Durchführung der kostenlosen Software einer Ableitung des Plausches 80 aus dem GNU-Projekt. Letzt, aber nicht zuletzt Pharo Plausch (eine Gabel des Quiekens, das zur Forschung und dem Gebrauch in kommerziellen Umgebungen orientiert ist), hat ein neuer und sauberer MIT offenen Quellplausch lizenziert, der frische Ideen und Interesse in den Plausch-Markt und die Szene bringt.

Eine bedeutende Entwicklung, die sich über alle aktuellen Plausch-Umgebungen ausgebreitet hat, ist der zunehmende Gebrauch von zwei Webfachwerk, Meeresküste und AIDA/Web, um das Gebäude von komplizierten Webanwendungen zu vereinfachen. Meeresküste hat beträchtliches Marktinteresse mit Cincom, Gemstone und dem Verbinden von Instantiations und Verlängern davon gesehen.

Einflüsse

John Shoch, ein Mitglied des LRG an PARC, hat in seiner 1979-Papierplausch-Schuld gegenüber der Theorie von Plato von Formen anerkannt, in denen ein idealer Archetyp die Schablone wird, von der andere Gegenstände abgeleitet werden.

Plausch hat die breitere Welt der Computerprogrammierung in vier Hauptgebieten beeinflusst. Es hat die Syntax und Semantik anderer Computerprogrammiersprachen begeistert. Zweitens war es ein Prototyp für ein Modell der als Nachrichtenübergang bekannten Berechnung. Drittens hat sein SCHLAPPSCHWANZ GUI die Fenstertechnik-Umgebungen von Personalcomputern in den späten zwanzigsten und frühen einundzwanzigsten Jahrhunderten so viel begeistert, so dass die Fenster der ersten Arbeitsfläche von Macintosh fast identisch zu den Fenstern MVC des Plausches 80 aussehen. Schließlich war die einheitliche Entwicklungsumgebung das Modell für eine Generation von Sehprogrammierwerkzeugen, die wie die Codebrowser und Testhilfeprogramme des Plausches aussehen.

Pythonschlange und Ruby haben einige Plausch-Ideen in einer Umgebung wiederdurchgeführt, die diesem von AWK oder Perl ähnlich ist. Der Plausch "metamodel" dient auch als die Inspiration für das Gegenstand-Musterdesign von Perl 6.

Die Syntax und das Laufzeitverhalten der Objektiven-C Programmiersprache sind stark unter Einfluss des Plausches.

Es gibt auch eine einem Plausch ähnliche Moduldurchführung, die für scripting entworfen ist, genannt S#, oder Script.NET. S# verwendet gerade rechtzeitig Kompilationstechnologie und unterstützt eine verlängerte einem Plausch ähnliche Sprache, die von David Simmons von Smallscript Corp. geschrieben ist

Mehrere Programmiersprachen wie Selbst, ECMAScript/JavaScript und Newspeak haben die Ideen vom Plausch in neuen Richtungen genommen.

Objektorientierte Programmierung

Als auf anderen objektorientierten Sprachen ist das Hauptkonzept im Plausch 80 (aber nicht im Plausch 72) das eines Gegenstands. Ein Gegenstand ist immer ein Beispiel einer Klasse. Klassen sind "Entwürfe", die die Eigenschaften und das Verhalten ihrer Beispiele beschreiben. Zum Beispiel könnte eine Fensterklasse eines GUI erklären, dass Fenster Eigenschaften wie das Etikett, die Position haben, und ob das Fenster sichtbar ist oder nicht. Die Klasse könnte auch erklären, dass Beispiele Operationen wie Öffnung, das Schließen, Bewegen und Verbergen unterstützen. Jeder besondere Fenstergegenstand würde seine eigenen Werte jener Eigenschaften haben, und jeder von ihnen würde im Stande sein, durch seine Klasse definierte Operationen durchzuführen.

Ein Plausch-Gegenstand kann genau drei Sachen machen:

  1. Halten Sie Staat (Verweisungen auf andere Gegenstände).
  2. Erhalten Sie eine Nachricht von sich oder einem anderen Gegenstand.
  3. Im Laufe der Verarbeitung einer Nachricht, senden Sie Nachrichten an sich oder einen anderen Gegenstand.

Der Staat, den ein Gegenstand hält, ist immer zu diesem Gegenstand privat. Andere Gegenstände können fragen oder diesen Staat nur durch das Senden von Bitten (Nachrichten) an den Gegenstand ändern, so zu tun. Jede Nachricht kann an jeden Gegenstand gesandt werden: Wenn eine Nachricht erhalten wird, bestimmt der Empfänger, ob diese Nachricht passend ist. Alan Kay hat kommentiert, dass trotz der auf Gegenstände gelenkten Aufmerksamkeit Nachrichtenübermittlung das wichtigste Konzept im Plausch ist: "Die große Idee ist 'Nachrichtenübermittlung' - dieser ist, was der Kern des Plausches/Quiekens alles über ist (und es etwas ist, was in unserem Xerox PARC Phase nie ganz vollendet wurde)."

Plausch ist eine "reine" objektorientierte Programmiersprache, dass, verschieden von Java und C ++ bedeutend, es gibt keinen Unterschied zwischen Werten, die Gegenstände und Werte sind, die primitive Typen sind. Im Plausch sind primitive Werte wie ganze Zahlen, booleans und Charaktere auch Gegenstände im Sinn, dass sie Beispiele von entsprechenden Klassen sind, und Operationen auf ihnen durch das Senden von Nachrichten angerufen werden. Ein Programmierer kann die Klassen ändern, die primitive Werte durchführen, so dass neues Verhalten für ihre Beispiele — zum Beispiel definiert werden kann, um neue Kontrollstrukturen — oder trotzdem durchzuführen, dass ihr vorhandenes Verhalten geändert wird. Diese Tatsache wird im allgemein gehörten Ausdruck "Im Plausch zusammengefasst alles ist ein Gegenstand", der genauer ausgedrückt werden kann, weil "alle Werte Gegenstände sind", wie Variablen nicht sind.

Da alle Werte Gegenstände sind, sind Klassen selbst auch Gegenstände. Jede Klasse ist ein Beispiel des metaclass dieser Klasse. Metaclasses sind der Reihe nach auch Gegenstände, und sind alle Beispiele einer Klasse genannt Metaclass. Codeblöcke sind auch Gegenstände.

Nachdenken

Plausch 80 ist ein völlig reflektierendes System, das im Plausch 80 selbst durchgeführt ist. Plausch 80 stellt sowohl strukturelles als auch rechenbetontes Nachdenken zur Verfügung. Plausch ist ein strukturell reflektierendes System, dessen Struktur durch den Plausch 80 Gegenstände definiert wird. Die Klassen und Methoden, die das System definieren, sind selbst Gegenstände und völlig ein Teil des Systems, das sie helfen zu definieren. Der Plausch-Bearbeiter kompiliert Textquellcode in Methode-Gegenstände, normalerweise Beispiele dessen. Diese werden zu Klassen durch die Speicherung von ihnen in einem Methode-Wörterbuch einer Klasse hinzugefügt. Der Teil der Klassenhierarchie, die Klassen definiert, kann neue Klassen zum System hinzufügen. Das System wird durch das Laufen des Plausches 80 Code erweitert, der schafft oder Klassen und Methoden definiert. Auf diese Weise ist ein Plausch 80 System ein "lebendes" System, um die Fähigkeit tragend, sich in der Durchlaufzeit zu erweitern.

Da die Klassen selbst Gegenstände sind, können sie an Fragen an solchem als gestellt werden "welche Methoden führen Sie durch?" oder "was schickt Variablen aufs Feld/einsteckt/als Beispiel anführt, definieren Sie?". So können Gegenstände leicht untersucht, (de) in Fortsetzungen veröffentlicht und so weiter mit dem allgemeinen Code kopiert werden, der für jeden Gegenstand im System gilt.

Plausch 80 stellt auch rechenbetontes Nachdenken, die Fähigkeit zur Verfügung, den rechenbetonten Staat des Systems zu beobachten. Auf Sprachen ist auf den ursprünglichen Plausch 80 zurückzuführen gewesen die aktuelle Aktivierung einer Methode ist als ein Gegenstand zugänglich, der über eine Pseudovariable (eines der sechs vorbestellten Wörter) genannt ist. Durch das Senden von Nachrichten an eine Methode-Aktivierung kann Fragen wie stellen, "wer diese Nachricht mir gesandt hat". Diese Möglichkeiten machen es möglich, Koroutinen oder das einer Einleitung ähnliche Zurückverfolgen durchzuführen, ohne die virtuelle Maschine zu modifizieren. Das Ausnahme-System wird mit dieser Möglichkeit durchgeführt. Einer des interessanteren Gebrauches davon ist im Seewebfachwerk, das den Programmierer entlastet, sich mit der Kompliziertheit eines Rücken-Knopfs eines WWW-Browsers durch die Speicherung von Verlängerungen für jede editierte Seite und die Schaltung zwischen ihnen zu befassen, weil der Benutzer eine Website befährt. Die Programmierung des Webservers mit der Meeresküste kann dann mit einem herkömmlicheren Programmierstil getan werden.

Wenn einem Gegenstand eine Nachricht gesandt wird, dass er nicht durchführt, sendet die virtuelle Maschine dem Gegenstand die Nachricht mit einem reification der Nachricht als ein Argument. Die Nachricht (ein anderer Gegenstand, ein Beispiel) enthält den Auswählenden der Nachricht und seiner Argumente. In einem interaktiven Plausch-System ist die Verzug-Durchführung dessen diejenige, die ein Fehlerfenster (Notifier) das Ausgeben des Fehlers dem Benutzer öffnet. Dadurch und die reflektierenden Möglichkeiten kann der Benutzer den Zusammenhang untersuchen, in dem der Fehler vorgekommen ist, definieren Sie den verstoßenden Code wieder, und, machen Sie alle innerhalb des Systems, mit den 80er Jahren des Plausches reflektierende Möglichkeiten weiter.

Ein anderer wichtiger Gebrauch dessen ist Eingreifen. Man kann eine Klasse schaffen, die keine Methoden außer definiert und von keiner anderen Klasse erbt. Die Beispiele dieser Klasse verstehen effektiv keine Nachrichten. So jedes Mal, wenn einer Nachricht an diese Beispiele gesandt wird, werden sie wirklich gesandt, folglich verwenden sie sich im Nachrichtensenden-Prozess. Solche Gegenstände werden Vertretungen genannt. Indem man passend durchführt, kann man verteilte Systeme schaffen, wo Vertretungen Vorwärtsnachrichten über ein Netz zu anderen Plausch-Systemen (eine Möglichkeit, die in Systemen wie CORBA, COM + und RMI üblich ist, aber hat zuerst im Plausch 80 in den 1980er Jahren den Weg gebahnt), und beharrliche Systeme, wo Änderungen im Staat einer Datenbank und ähnlich geschrieben werden. Ein Beispiel dieses Letzteren ist der VOSS von Logikkünsten (Virtuelles Gegenstand-Lagerungssystem) verfügbar für den VA Plausch unter der offenen Doppelquelle und dem kommerziellen Genehmigen.

Syntax

Plausch 80 Syntax ist eher Minimalist, der auf nur einer Hand voll Behauptungen und vorbestellte Wörter gestützt ist. Tatsächlich werden nur sechs "Schlüsselwörter" im Plausch vorbestellt: und. Diese werden wirklich Pseudovariablen, Bezeichner genannt, die den Regeln für variable Bezeichner folgen, aber bindings anzeigen, dass sich der Programmierer nicht ändern kann., und Pseudovariablen sind Singleton-Beispiele. und beziehen Sie sich auf den Empfänger einer Nachricht innerhalb einer als Antwort auf diese Nachricht aktivierten Methode, aber sendet daran werden in der Superklasse der Definieren-Klasse der Methode aber nicht der Klasse des Empfängers nachgeschlagen, der Methoden in Unterklassen erlaubt, Methoden desselben Namens in Superklassen anzurufen. bezieht sich auf die aktuelle Aktivierungsaufzeichnung. Die einzigen eingebauten Sprachkonstruktionen sind Nachricht, sendet Anweisung, Methode-Rückkehr und wörtliche Syntax für einige Gegenstände. Von seinen Ursprüngen als eine Sprache für Kinder aller Alter verwendet Standardplausch-Syntax Zeichensetzung gewissermaßen mehr wie Englisch als Hauptströmungscodiersprachen. Der Rest der Sprache, einschließlich Kontrollstrukturen für die bedingte Einschätzung und Wiederholung, wird oben auf den eingebauten Konstruktionen von der Standardplausch-Klassenbibliothek durchgeführt. (Aus Leistungsgründen können Durchführungen anerkennen und als speziell einige jener Nachrichten behandeln; jedoch ist das nur eine Optimierung und ist in die Sprachsyntax nicht festverdrahtet.)

Druckfehler

Die folgenden Beispiele illustrieren die allgemeinsten Gegenstände, die als wörtliche Werte im Plausch 80 Methoden geschrieben werden können.

Zahlen. Die folgende Liste illustriert einige der Möglichkeiten.

42

- 42

123.45

1.2345e2

2r10010010

16rA000

</Quelle>

Die letzten zwei Einträge sind eine Dualzahl und eine hexadecimal Zahl beziehungsweise. Die Zahl vor dem 'r' ist die Basis oder Basis. Die Basis muss keine Macht zwei sein; zum Beispiel 36rSMALLTALK ist eine gültige 80738163270632 Dezimalzahl gleiche Zahl.

Charaktere werden durch das Vorangehen ihnen mit einem Dollarzeichen geschrieben:

Schnuren sind Folgen von in einzelnen Notierungen eingeschlossenen Charakteren:

Um ein Zitat in eine Schnur einzuschließen, entkommen Sie ihm mit einem zweiten Zitat:

Anführungszeichen brauchen das Entgehen nicht, da einzelne Notierungen eine Schnur abgrenzen:

Zwei gleiche Schnuren (sind Schnuren gleich, wenn sie alle gleich Charaktere enthalten), können verschiedene Gegenstände sein, die in verschiedenen Plätzen im Gedächtnis wohnen. Zusätzlich zu Schnuren hat Plausch eine Klasse von Charakter-Folge-Gegenständen genannt das Symbol. Wie man versichert, sind Symbole einzigartig — es kann keine zwei gleichen Symbole geben, die verschiedene Gegenstände sind. Deswegen sind Symbole sehr preiswert, um sich zu vergleichen, und werden häufig für Sprachkunsterzeugnisse wie Nachrichtenauswählende (sieh unten) verwendet.

Symbole werden als # gefolgt von einer wörtlichen Schnur geschrieben. Zum Beispiel:

Auswählende werden als # gefolgt von Charakteren geschrieben. Zum Beispiel:

Die ANSI Plausch-Standarderlaubnis-Durchführungen zu und die meisten Durchführungen tun, verwenden denselben Typ für Symbole und Auswählende, und machen sie gleichwertig. So in den meisten Durchführungen sind die obengenannten zwei gleichwertig.

Reihe:

definiert eine Reihe von vier ganzen Zahlen.

Viele Durchführungen unterstützen die folgende wörtliche Syntax für ByteArrays:

definiert ByteArray von vier ganzen Zahlen.

Und dauern Sie, aber nicht zuletzt, Blöcke (anonyme Funktionsdruckfehler)

Blöcke werden im Detail weiter im Text erklärt.

Viele Plausch-Dialekte führen zusätzliche Syntaxen für andere Gegenstände durch, aber diejenigen sind oben die durch alle unterstützte Hauptsache.

Variable Behauptungen

Die zwei Arten der im Plausch allgemein verwendeten Variable sind Beispiel-Variablen und vorläufige Variablen. Andere Variablen und verwandte Fachsprache hängen von der besonderen Durchführung ab. Zum Beispiel hat VisualWorks geteilte Variablen der Klasse, und namespace hat Variablen geteilt, während Quieken und viele andere Durchführungen Klassenvariablen, Lache-Variablen und globale Variablen haben.

Vorläufige variable Behauptungen im Plausch sind Variablen, die innerhalb einer Methode (sieh unten) erklärt sind. Sie werden an der Oberseite von der Methode als Namen erklärt, die durch Räume getrennt sind, und haben durch vertikale Bars eingeschlossen. Zum Beispiel:

erklärt eine vorläufige Variable genannt Index. Vielfache Variablen können innerhalb eines Satzes von Bars erklärt werden:

erklärt zwei Variablen: Index und Vokale.

Anweisung

Eine Variable wird ein Wert über zugeteilt ': =' Syntax. So:

Teilt die Schnur 'aeiou' der vorher offen erklärten Vokal-Variable zu. Die Schnur ist ein Gegenstand (eine Folge von Charakteren zwischen einzelnen Notierungen ist die Syntax für wörtliche Schnuren), geschaffen durch den Bearbeiter während der Übersetzung.

Im ursprünglichen Parc-Platz-Image ist der glyph des unterstreichen Charakters (_) als ein nach links liegender Pfeil erschienen. Plausch hat ursprünglich diesen nach links Pfeil als der einzige Anweisungsmaschinenbediener akzeptiert. Ein moderner Code enthält noch, was scheint zu sein, unterstreicht das Handeln als Anweisungen, auf diesen ursprünglichen Gebrauch zurückgehend. Die meisten modernen Plausch-Durchführungen akzeptieren entweder das Unterstreichen oder den Doppelpunkt - kommt Syntax gleich.

Nachrichten

Die Nachricht ist die grundsätzlichste Sprachkonstruktion im Plausch. Sogar Kontrollstrukturen werden durchgeführt, weil Nachricht sendet. Plausch nimmt standardmäßig eine gleichzeitige, einzelne dynamische Nachrichtenabsendungsstrategie (im Gegensatz zu einer gleichzeitigen, vielfachen Absendungsstrategie an, die durch einige andere objektorientierte Sprachen angenommen ist).

Das folgende Beispiel sendet die Nachricht 'factorial' an die Nummer 42:

In dieser Situation 42 wird den Nachrichtenempfänger genannt, während 'factorial' der Nachrichtenauswählende ist. Der Empfänger antwortet auf die Nachricht durch das Zurückbringen eines Werts (vermutlich in diesem Fall der factorial 42). Unter anderem kann das Ergebnis der Nachricht einer Variable zugeteilt werden:

"factorial" ist oben, was eine unäre Nachricht genannt wird, weil nur ein Gegenstand, der Empfänger, beteiligt wird. Nachrichten können zusätzliche Gegenstände als Argumente wie folgt tragen:

In diesem Ausdruck werden zwei Gegenstände beteiligt: 2 als der Empfänger und 4 als das Nachrichtenargument. Das Nachrichtenergebnis, oder im Plausch-Sprachgebrauch, die Antwort soll 16 sein. Solche Nachrichten werden Schlüsselwort-Nachrichten genannt. Eine Nachricht kann mehr Argumente mit der folgenden Syntax haben:

der auf den Index des Charakters 'o' in der Empfänger-Schnur antwortet, die Suche vom Index 6 anfangend. Der Auswählende dieser Nachricht ist "indexOf:startingAt:", aus zwei Stücken oder Schlüsselwörtern bestehend.

Solches Durchschießen von Schlüsselwörtern und Argumenten wird gemeint, um Lesbarkeit des Codes zu verbessern, da Argumente durch ihre vorhergehenden Schlüsselwörter erklärt werden. Zum Beispiel könnte ein Ausdruck, um ein Rechteck mit einem C ++ oder Java ähnliche Syntax zu schaffen, als geschrieben werden:

Es ist unklar, der Argument der ist. Im Vergleich, im Plausch, würde dieser Code als geschrieben:

Der Empfänger ist in diesem Fall "Rechteck", eine Klasse, und die Antwort wird ein neues Beispiel der Klasse mit der angegebenen Breite und Höhe sein.

Schließlich können die meisten speziellen (nichtalphabetischen) Charaktere als verwendet werden, was binäre Nachrichten genannt wird. Diese erlauben mathematischen und logischen Maschinenbedienern, in ihrer traditionellen Form geschrieben zu werden:

der die Nachricht "+" an den Empfänger 3 mit 4 sendet, ist als das Argument gegangen (dessen Antwort 7 sein wird). Ähnlich

ist die Nachricht">" gesandt an 3 mit dem Argument 4 (dessen Antwort falsch sein wird).

Bemerken Sie, dass der Plausch 80 Sprache selbst die Bedeutung jener Maschinenbediener nicht einbezieht. Das Ergebnis des obengenannten wird nur dadurch definiert, wie der Empfänger der Nachricht (in diesem Fall ein Zahl-Beispiel) auf Nachrichten "+" und"> antwortet".

Eine Nebenwirkung dieses Mechanismus ist Maschinenbediener, der überlädt. Eine Nachricht">" kann auch durch andere Gegenstände verstanden werden, dem Gebrauch von Ausdrücken der Form "a> b" erlaubend, sie zu vergleichen.

Ausdrücke

Ein Ausdruck kann vielfache Nachricht einschließen sendet. In diesem Fall werden Ausdrücke gemäß einer einfachen Ordnung der Priorität grammatisch analysiert. Unäre Nachrichten haben die höchste Priorität, die von binären Nachrichten gefolgt ist, die von Schlüsselwort-Nachrichten gefolgt sind. Zum Beispiel:

wird wie folgt bewertet:

  1. 3 erhält die Nachricht "factorial" und antwortet auf 6
  2. 4 erhält die Nachricht "factorial" und antwortet auf 24
  3. 6 erhält die Nachricht "+" mit 24 als das Argument und antwortet auf 30
  4. 30 erhält die Nachricht "between:and:" mit 10 und 100 als Argumente und Antworten wahrer

Die Antwort der letzten gesandten Nachricht ist das Ergebnis des kompletten Ausdrucks.

Parenthesen können die Ordnung der Einschätzung, wenn erforderlich, verändern. Zum Beispiel,

wird die Bedeutung ändern, so dass der Ausdruck zuerst "3 factorial + das 4" Tragen 10 schätzt. Dass 10 dann die zweite "factorial" Nachricht erhält, 3628800 tragend. 3628800 erhält dann "between:and:", das falsche Antworten.

Bemerken Sie, dass, weil die Bedeutung von binären Nachrichten in den Plausch 80 Syntax nicht festverdrahtet ist, wie man betrachtet, sie alle gleiche Priorität haben und einfach vom linken bis Recht bewertet werden. Wegen dessen kann die Bedeutung von Plausch-Ausdrücken mit binären Nachrichten von ihrer "traditionellen" Interpretation verschieden sein:

wird als" (3 + 4) * 5" bewertet, 35 erzeugend. Um die erwartete Antwort 23 zu erhalten, müssen Parenthesen verwendet werden, um die Ordnung von Operationen ausführlich zu definieren:

Unäre Nachrichten können durch das Schreiben ihnen nacheinander gekettet werden:

der "factorial" an 3, dann "factorial" zum Ergebnis (6) sendet, dann "loggen Sie" zum Ergebnis (720), das Ergebnis 2.85733 erzeugend.

Eine Reihe von Ausdrücken kann als im folgenden (hypothetischen) Beispiel, jeder geschrieben werden, der durch eine Periode getrennt ist. Dieses Beispiel schafft zuerst ein neues Beispiel des Klassenfensters, versorgt es in einer Variable, und sendet dann zwei Nachrichten daran.

| Fenster |

Fenster: = neues Fenster.

Fensteretikett: 'Hallo'.

Fenster offener

</Quelle>

Wenn eine Reihe von Nachrichten an denselben Empfänger wie im Beispiel oben gesandt wird, können sie auch als eine Kaskade mit individuellen durch Strichpunkte getrennten Nachrichten geschrieben werden:

Fenster neuer

Etikett: 'Hallo';

offener

</Quelle>

Das schreibt vom früheren Beispiel um, weil ein einzelner Ausdruck das Bedürfnis vermeidet, das neue Fenster in einer vorläufigen Variable zu versorgen. Gemäß den üblichen Prioritätsregeln wird die unäre "neue" Nachricht zuerst, und dann "Etikett gesandt:" Und "offen" werden an die Antwort von "neuen" gesandt.

Codeblöcke

Ein Block des Codes (eine anonyme Funktion) kann als ein wörtlicher Wert ausgedrückt werden (der ein Gegenstand ist, da alle Werte Gegenstände sind.) Das wird mit eckigen Klammern erreicht:

Wo: Params ist die Liste von Rahmen, die der Code nehmen kann. Das bedeutet, dass der Plausch codiert:

kann als verstanden werden:

:

oder hat in Lambda-Begriffen als ausgedrückt:

:und

kann als bewertet werden

Oder im Lambda nennt als:

Der resultierende Block-Gegenstand kann einen Verschluss bilden: Es kann auf die Variablen seiner einschließenden lexikalischen Spielraume jederzeit zugreifen. Blöcke sind erstklassige Gegenstände.

Blöcke können durch das Senden ihnen der Wertnachricht durchgeführt werden (zusammengesetzte Schwankungen bestehen, um Rahmen dem Block z.B 'value:value zur Verfügung zu stellen:' und 'valueWithArguments:').

Die wörtliche Darstellung von Blöcken war eine Neuerung, die einerseits bestimmtem Code erlaubt hat, bedeutsam lesbarer zu sein; es hat Algorithmen erlaubt, die Wiederholung einschließen, auf eine klare und kurze Weise codiert zu werden. Code, der normalerweise mit Schleifen auf einigen Sprachen geschrieben würde, kann kurz im Plausch mit Blöcken manchmal in einer einzelnen Linie geschrieben werden. Aber wichtiger erlauben Blöcke Kontrollstruktur, mit Nachrichten und polymorphism ausgedrückt zu werden, da Blöcke Berechnung aufschieben und polymorphism verwendet werden kann, um Alternativen auszuwählen. So, "wenn dann sonst" im Plausch geschrieben und als durchgeführt wird

Wahre Methoden für die Einschätzung

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock

^trueAlternativeBlock schätzen

Falsche Methoden für die Einschätzung

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock

^falseAlternativeBlock-Wert

Bemerken Sie, dass das mit der funktionellen Programmierung verbunden ist, worin Muster der Berechnung (hier Auswahl) in höherwertige Funktionen abstrahiert werden. Zum Beispiel, die ausgesuchte Nachricht: Auf einer Sammlung ist zum höherwertigen Funktionsfilter auf einem passenden functor gleichwertig.

Kontrollstrukturen

Kontrollstrukturen haben spezielle Syntax im Plausch nicht. Sie werden stattdessen als an Gegenstände gesandte Nachrichten durchgeführt. Zum Beispiel wird bedingte Ausführung durch das Senden der Nachricht ifTrue durchgeführt: Zu einem Gegenstand von Boolean, als ein Argument den Block des durchzuführenden Codes wenn, und nur passierend wenn der Empfänger von Boolean wahr ist.

Der folgende Code demonstriert das:

Ergebnis: = a> b

ifTrue: ['größerer']

ifFalse: ['weniger oder gleich']

</Quelle>

Blöcke werden auch verwendet, um benutzerbestimmte Kontrollstrukturen, Zähler, Besucher, pluggable Verhalten und viele andere Muster durchzuführen.

Zum Beispiel:

| AString-Vokale |

aString: = 'Ist das eine Schnur'.

Vokale: = aString ausgesucht: [: aCharacter | aCharacter isVowel].

</Quelle>

In der letzten Linie wird der Schnur die ausgesuchte Nachricht gesandt: Mit einem Argument, das ein wörtlicher Codeblock ist. Der wörtliche Codeblock wird als eine Prädikat-Funktion verwendet, die wahr antworten sollte, wenn, und nur wenn ein Element der Schnur in die Sammlung von Charakteren eingeschlossen werden sollte, die den Test befriedigen, der durch den Codeblock vertreten ist, der das Argument für "ausgesucht ist:" Nachricht.

Ein Schnur-Gegenstand antwortet auf "ausgesucht:" Nachricht durch das Wiederholen durch seine Mitglieder (indem Sie sich die Nachricht senden, "tun Sie: "), den Auswahl-Block ("Betonhohlstein") einmal mit jedem Charakter bewertend, enthält es als das Argument. Wenn bewertet (indem es die Nachricht "Wert gesandt wird: jeder"), der Auswahl-Block (Verweise angebracht durch den Parameter "Betonhohlstein", und definiert durch den Block wörtlich" [: ACharacter | aCharacter isVowel]") antwortet ein boolean, der dann "ifTrue gesandt wird:". Wenn der boolean der wahre Gegenstand ist, wird der Charakter zu einer zurückzugebenden Schnur hinzugefügt.

Weil "ausgesucht:" Methode wird in der abstrakten Klasse Collection definiert, sie kann auch wie das verwendet werden:

| Rechtecke aPoint Kollisionen |

Rechtecke: = OrderedCollection

mit: (Rechteck ist abgereist: 0 Recht: 10 Spitze: 100 Boden: 200)

mit: (Rechteck ist abgereist: 10 Recht: 10 Spitze: 110 Boden: 210).

aPoint: = Punkt x: 20 y: 20.

Kollisionen: = ausgesuchte Rechtecke: [: aRect | aRect containsPoint: aPoint].

</Quelle>

Klassen

Das ist eine Aktienklassendefinition:

Gegenstand-Unterklasse:

#MessagePublisher

instanceVariableNames:

classVariableNames:

poolDictionaries:

Kategorie: 'Plausch-Beispiele'

</Quelle>

Häufig wird der grösste Teil dieser Definition durch die Umgebung ausgefüllt. Bemerken Sie, dass das wirklich eine Nachricht an den "Gegenstand" - Klasse ist, um eine Unterklasse genannt "MessagePublisher" zu schaffen. Mit anderen Worten: Klassen sind erstklassige Gegenstände im Plausch, der Nachrichten gerade wie jeder andere Gegenstand erhalten kann und dynamisch in der Ausführungszeit geschaffen werden kann.

Methoden

Wenn ein Gegenstand eine Nachricht erhält, wird eine Methode, die den Nachrichtennamen vergleicht, angerufen. Der folgende Code definiert eine Methode veröffentlichen, und definiert so, was geschehen wird, wenn dieser Gegenstand die 'veröffentlichen' Nachricht erhält.

veröffentlichen Sie

Abschrift-Show: 'Hallo, Welt!'

</Quelle>

Die folgende Methode demonstriert erhaltende vielfache Argumente und das Zurückbringen eines Werts:

quadMultiply: i1 und: i2

"Diese Methode multipliziert die gegebenen Zahlen mit einander und das Ergebnis um 4."

| mul |

mul: = i1 * i2.

^mul * 4

</Quelle>

Der Name der Methode ist. Der Rückwert wird mit dem Maschinenbediener angegeben.

Bemerken Sie, dass Gegenstände dafür verantwortlich sind, dynamisch an der Durchlaufzeit zu bestimmen, welche Methode, als Antwort auf eine Nachricht durchzuführen —, während auf vielen Sprachen das (manchmal, oder sogar immer) bestimmt statisch während der Übersetzung sein kann.

Das Realisieren von Klassen

Der folgende Code:

MessagePublisher neuer

</Quelle>

schafft (und Umsatz) ein neues Beispiel der Klasse von MessagePublisher. Das wird normalerweise einer Variable zugeteilt:

Herausgeber: = MessagePublisher neuer

</Quelle>

Jedoch ist es auch möglich, eine Nachricht an einen vorläufigen, anonymen Gegenstand zu senden:

Neue MessagePublisher veröffentlichen

</Quelle>

Hallo Weltbeispiel

Im folgenden Code, der Nachricht "Show:" Wird an den Gegenstand "Abschrift" mit der Schnur wörtlich 'Hallo, Welt gesandt!' als sein Argument. Beschwörung der "Show:" Methode verursacht die Charaktere seines Arguments (die Schnur wörtlich 'Hallo, Welt!'), um in der Abschrift ("Terminal") Fenster gezeigt zu werden.

Abschrift-Show: 'Hallo, Welt!'.

</Quelle>

Bemerken Sie, dass ein Fenster Transcript würde offen sein müssen, um die Ergebnisse dieses Beispiels zu sehen.

Bildbasierte Fortsetzung

Die meisten populären Programmiersysteme trennen statischen Programm-Code (in der Form von Klassendefinitionen, Funktionen oder Verfahren) vom dynamischen, oder Durchlaufzeit, Programm-Staat (wie Gegenstände oder andere Formen von Programm-Daten). Sie laden Programm-Code, wenn ein Programm anfängt, und jeder vorherige Programm-Staat ausführlich von Konfigurationsdateien oder anderen Datenquellen erfrischt werden muss. Irgendwelche Einstellungen, die das Programm (und Programmierer) nicht ausführlich spart, müssen wieder für jeden Wiederanfang aufgestellt werden. Ein traditionelles Programm verliert auch viel nützliche Dokumenteninformation jedes Mal, wenn ein Programm eine Datei, quitt spart, und umlädt. Das verliert Details, die Geschichte oder Cursor-Position aufmachen. Gestützte Systeme des Images zwingen das Verlieren von allem nicht, was gerade, weil ein Computer abgedreht wird, oder ein OS aktualisiert.

Viele Plausch-Systeme differenzieren jedoch zwischen Programm-Daten (Gegenstände) und Code (Klassen) nicht. Tatsächlich sind Klassen Gegenstände selbst. Deshalb versorgen die meisten Plausch-Systeme den kompletten Programm-Staat (sowohl einschließlich der Klasse als auch einschließlich Nichtklassengegenstände) in einer Bilddatei. Das Image kann dann durch den Plausch virtuelle Maschine geladen werden, um ein einem Plausch ähnliches System zu einem vorherigen Staat wieder herzustellen. Das wurde dadurch begeistert, BEUGEN eine Sprache, die von Alan Kay geschaffen ist, und hat in seiner M.Sc. These beschrieben.

Andere Sprachen, dass der Musteranwendungscode als eine Form von Daten, wie Lispeln, häufig bildbasierte Fortsetzung ebenso verwendet.

Plausch-Images sind (restartable) Kernmüllkippen ähnlich und können dieselbe Funktionalität wie Kernmüllkippen, solcher, wie verzögert, oder das entfernte Beseitigen mit dem vollen Zugang zum Programm-Staat zur Zeit des Fehlers zur Verfügung stellen.

Niveau des Zugangs

Alles im Plausch 80 ist für die Modifizierung aus einem laufenden Programm verfügbar. Das bedeutet, dass, zum Beispiel, der IDE in einem laufenden System geändert werden kann, ohne es wiederanzufangen. In einigen Durchführungen kann die Syntax der Sprache oder der Müll-Sammlungsdurchführung auch im Fluge geändert werden. Sogar die Behauptung ist im Plausch gültig, obwohl die Durchführung davon nicht empfohlen wird. Wenn verwendet, vernünftig berücksichtigt dieses Niveau der Flexibilität eine der kürzesten erforderlichen Zeiten für den neuen Code, um in ein Produktionssystem einzugehen.

Gerade rechtzeitig Kompilation

Plausch-Programme werden gewöhnlich zu bytecode kompiliert, der dann durch eine virtuelle Maschine interpretiert oder dynamisch in den maschinenheimischen Code übersetzt wird.

Liste von Durchführungen

  • Athena, Plausch scripting Motor für Java> =1.6
  • Bistro
  • Cincom hat die folgenden Plausch-Produkte: ObjectStudio, VisualWorks und WebVelocity.
  • Sehplausch-Unternehmen und Familie, einschließlich Smalltalk/V
  • Exept Software, Smalltalk/X
  • F-Schrift
  • Edelstein, GemStone/S
  • GNU-Plausch
  • Étoilé Pragmatischer Plausch, Plausch für Étoilé, eine mit Sitz in GNUstep Benutzerumgebung
  • StepTalk, GNUstep scripting Fachwerk verwendet Plausch-Sprache auf einer Objektiven-C Durchlaufzeit
  • Wenig Plausch
  • Gegenstand-Künste, Delfin-Plausch
  • LSW Visionsplausch hat mit Gegenstand-Künsten vereinigt
  • Panda-Plausch, offener Quellmotor, der in C geschrieben ist, hat keine Abhängigkeiten außer libc
  • Pharo Plausch, Pharo Projektmehrplattform-Plausch der offenen Quelle
  • Taschenplausch, Läufe auf dem Palme-Piloten
  • Wiederfabrik, erzeugt
#Smalltalk
  • Gegenstand, steht Plausch-MT-Plausch für Windows in Verbindung
  • Plausch YX
  • Quieken, offener Quellplausch
  • Zahn, JIT VM geschrieben im Quieken-Plausch
  • CogDroid, Hafen der non-JIT Variante des Zahns VM zum Androiden
  • eToys, eToys Sehprogrammiersystem, um zu erfahren
  • iSqueak, Quieken-Dolmetscher Hafen für EIN/AUSGABE-STEUERSYSTEM-Geräte, iPhone/iPad
  • JSqueak, Quieken-Dolmetscher, der in Java geschrieben ist
  • Kartoffel, Quieken-Dolmetscher, der in Java, einer direkten Ableitung von JSqueak geschrieben ist
  • RoarVM, RoarVM ist mehr - und der manycore Dolmetscher für Squeak und Pharo
  • Strongtalk, für Windows, bietet das fakultative starke Schreiben an
  • Susie, Scripting das Verwenden eines Plausch-Dolmetschers Motor
  • Instantiations, VA Plausch, der das später folgende zu IBM VisualAge Smalltalk ist
  • Plausch von VisualAge
  • Bernsteinplausch-Plausch, der oben auf JavaScript läuft

Weiterführende Literatur

Links


Nintendo Superunterhaltungssystem / Südafrikanische Republik
Impressum & Datenschutz