Warum werden Anweisungen in vielen Programmiersprachen mit Semikolons abgeschlossen?


130

Gibt es einen Grund, warum ein Semikolon anstelle eines anderen Symbols als Zeilenabschluss gewählt wurde?

Ich möchte die Geschichte hinter dieser Entscheidung kennen und hoffe, dass die Antworten zu Einsichten führen, die zukünftige Entscheidungen beeinflussen können.


6
Erlang und Prolog verwenden Punkt.
Dave Clarke

13
Ich frage mich, wie viele Programmiersprachen Sie kennen. Es gibt viele Sprachen, die keine Semikolons verwenden.
Bürger

50
Ich wette, die Antwort wird so etwas wie "Der ASCII-Wert des Semikolons ist besonders haltbar, wenn er als letztes Zeichen auf einer Lochkarte mit 80 Zeichen verwendet wird."
Ryan Thompson

22
Ihre Frage geht nicht weit genug. Die eigentliche Frage ist: "Warum überhaupt ein Symbol?"
Konrad Rudolph

5
Weil es sich in der Startzeile einer QWERTY-Tastatur befindet?
Mittwoch,

Antworten:


132

Im Englischen wird das Semikolon beispielsweise zum Trennen von Elementen in einer Anweisungsliste verwendet

Sie sah drei Männer: Jamie, der aus Neuseeland kam; John, der Sohn des Milchmanns; und George, eine hagere Art von Mann.

Wenn Sie beim Programmieren mehrere Anweisungen trennen und einen Punkt verwenden, kann dies leicht zu einem Dezimalpunkt führen. Die Verwendung des Semikolons bietet eine einfach zu analysierende Methode zum Trennen der einzelnen Programmanweisungen, wobei die normale englische Zeichensetzung beibehalten wird.

Bearbeiten zum Hinzufügen
In den Anfangszeiten, als Speicher teuer und die Verarbeitung langsam war und die ersten Programmiersprachen entwickelt wurden, war es erforderlich, das Programm zur Verarbeitung in separate Anweisungen aufzuteilen. Einige Sprachen erforderten, dass jede Anweisung in eine Zeile gesetzt wurde, damit der Wagenrücklauf als Anweisungsbegrenzer fungieren konnte. Andere Sprachen erlaubten ein freieres Format für das Textlayout und erforderten daher ein bestimmtes Trennzeichen. Dieses Zeichen wurde als Semikolon ausgewählt, höchstwahrscheinlich aufgrund der Ähnlichkeit mit seiner Verwendung in der englischen Sprache (dies muss eine Vermutung sein; ich war zu diesem Zeitpunkt nicht da) und da es keinen Konflikt mit der anderen Zeichensetzung erzeugte Zeichen und Symbole, die für mathematische oder andere syntaktische Zwecke benötigt wurden.

Erneut bearbeiten
Die Notwendigkeit für ein Abschlusszeichen geht zurück auf die Anforderungen für das Parsen des Sprachtextes. Die frühen Compiler wurden in Assembler-Sprache oder in einigen Fällen direkt in Handarbeit erstellten binären Maschinenanweisungen geschrieben. Ein Sonderzeichen, das das Ende der Anweisung identifiziert und den zu verarbeitenden Textabschnitt begrenzt, erleichtert die Verarbeitung erheblich. Wie ich oben sagte, haben andere Sprachen den Wagenrücklauf oder Klammern verwendet. Algol, Pascal, Ada, BCPL, B, C, PL / M und andere Sprachfamilien verwenden zufällig das Semikolon. Was die erste Person betrifft, die diesen speziellen Charakter benutzte, gehe ich in der Geschichte nicht weit genug zurück, um mich zu erinnern. Seine Wahl und Annahme ist als vollkommen sinnvoll

  • Seine Verwendung spiegelt die Verwendung in der normalen englischen Zeichensetzung wider.
  • Andere Zeichen (z. B. der Punkt) können verwirrend sein, da sie bereits häufig verwendet werden (ein Punkt wird auch als Dezimalpunkt verwendet).
  • Ein sichtbares Interpunktionszeichen ermöglicht ein frei formatierbares Code-Layout.
  • Die Verwendung eines ähnlichen Begrenzungszeichens in abgeleiteten oder späteren Sprachen baut auf der Vertrautheit aller Programmierer auf, die die frühere Sprache verwendet haben.

Abschließend denke ich, dass mehr Zeit für diese Antworten und Kommentare aufgewendet wurde, als für die Entscheidung, das Semikolon zum Beenden einer Anweisung bei der Gestaltung der ersten Sprache zu verwenden, in der es auf diese Weise verwendet wurde.


19
Nicht ganz richtig. Das Semikolon trennt Sätze in Blöcke: Jeder Block sollte ein Arbeitssatz sein, aber wir verwenden das Semikolon, um anzuzeigen, dass eine starke Verbindung zwischen zwei Sätzen besteht. Es liegt auf halbem Weg zwischen einem Komma und einem Punkt, also ist es in der Tat ein Haltepunkt, aber es verknüpft einen Satz mit dem nächsten. Der obige Satz würde lauten: "Sie sah drei Männer; Jamie: der aus Neuseeland kam, John: der Sohn des Milchmanns und George: eine hagere Art von Mann." Ihre Verwendung des Semikolons kann durch ein Komma ersetzt werden. Etwas abseits des Themas, aber das Wesentliche ist dasselbe. es bricht Aussagen auf.
alex.p

40
@ alex.p eigentlich ist eine akzeptable Verwendung eines Semikolons anstelle eines Kommas, wenn es einen verwirrenden Satz verursachen würde, was dies korrekt macht.
Ryathal

13
Kritische Informationen zu Semikolons: theoatmeal.com/comics/semicolon
Ed James

7
@ alex.p: Anscheinend sagen Sie, dass Ians Verwendung falsch ist, aber Sie könnten einfach sagen, dass seine Erklärung, wie wir Semikolons verwenden, unvollständig ist. Wenn Sie sagen, dass er sich irrt, dann irren Sie sich. Seine Verwendung von Semikolons ist völlig konventionell, und ich würde viel häufiger raten als das Beispiel, das Sie geben. Wenn Sie einfach sagen, dass er keine erschöpfende Erklärung gibt, dann bin ich mir nicht sicher, warum das wirklich erwähnenswert ist.
Iconoclast

17
@Ian "Das muss eine Vermutung sein, ich war zu der Zeit nicht da" Sie haben die perfekte Gelegenheit verpasst, dort ein Semikolon (richtig) zu verwenden :)
Travis Christian

70

Viele Sprachen verwenden eine Syntax, die C nachempfunden ist (die B nachempfunden ist - danke @Crollster). Wie aus den Kommentaren hervorgeht, gibt es eine lange Kette solcher Sprachen ... B wurde von PL / I inspiriert, dem ALGOL bei der Verwendung von ;als Trennzeichen vorausging .

Da in C das Anweisungsende steht ;, folgen diese Sprachen.

Was den Grund betrifft, warum es in C als Anweisungsbegrenzer ausgewählt wurde - möglicherweise aufgrund seiner Verwendung in Englisch, um "voneinander abhängige Anweisungen anzuzeigen" .

C wurde auch auf dem PDP-11 zu einer Zeit erfunden, in der nur begrenzter Speicher für Zeichensätze zur Verfügung stand, sodass die Erfinder der Sprachen innerhalb dieser Einschränkungen arbeiten mussten.


8
C hat gerade die Konvention befolgt, Semikolons zu verwenden, wie sie von seinem Vorgänger 'B'
Crollster am

8
B hat gerade die Konvention befolgt, Semikolons zu verwenden, wie sie von seinem Vorgänger 'PL / I' verwendet wurden :)
Skomski

15
@Skomski - Welches folgte was? Ich warte auf die letzte Schildkröte;)
Oded

26
-1; Kommt schon Jungs, haben wir alle den einflussreichen ALGOL vergessen? Es hatte Semikolons als Anweisungstrennzeichen vor allem, was Sie sonst noch erwähnen. (Ich weiß nicht, ob es die Idee von woanders genommen hat)
hugomg

13
@Oded - Ich denke, Sie werden feststellen, dass es sich um Schildkröten handelt . * 8 ')
Mark Booth

54

FORTRAN verwendete den Wagenrücklauf, um Anweisungen abzugrenzen. Verwendeter COBOL-Zeitraum. LISP hat nichts benutzt und sich bei allem auf Klammern verlassen. ALGOL war die erste Sprache, die Semikolon zur Trennung von Anweisungen verwendete. PASCAL folgte dem Beispiel von ALGOL und verwendete Semikolon, um Anweisungen zu trennen.

PL / I hat ein Semikolon zum Beenden von Anweisungen verwendet. Es gibt einen Unterschied, der in PASCAL leicht zu erkennen ist. Ada folgte PL / I in diesem Punkt und nicht ALGOLs.

Semikolon als Trenn- oder Abschlusszeichen für Anweisungen wurde von der Informatik-Community schnell als nützliche Notation akzeptiert, und meines Wissens folgte jede nachfolgende blockstrukturierte Sprache dem Vorbild von ALGOL und verwendete Semikolon, um Anweisungen zu trennen oder zu beenden.

Ich war vor vielen Jahren gesagt , dass BCPL sowohl Semikolon verwendet und Wagenrücklauf als Anweisung Separatoren / Abbrechern, aber ich habe nie die Sprache selbst und bin nicht in der Lage , dies zu überprüfen. Irgendwann wurde die Verwendung des Wagenrücklaufs zum Trennen oder Beenden von Anweisungen von den BCPL-Nachkommen gestrichen. BCPL zeugte B, B zeugte C, C zeugte C ++, Java, D und eine ganze Reihe von Dingen, die wesentlich weniger durchdacht waren als PASCAL und Ada.


2
Es sollte beachtet werden, dass die Verwendung von Semikolon oder Newline in letzter Zeit wieder auftaucht. Javascript, Lua, Go und Haskell haben alle ein implizites Semikolon in Newline, wenn es dort syntaktisch gültig ist. Und natürlich einige Sprachen, die Newline als Trennzeichen beibehalten haben. Shell und Python kommen hier in den Sinn.
Jan Hudec

2
+1 für "wesentlich weniger durchdacht als PASCAL und Ada"
Aditya

2
Algol 58 , ein Vorläufer von Algol 60, verwendete Semikolons. Zu dieser Zeit wurde häufig zwischen der Veröffentlichungsform einer Sprache und der tatsächlichen Eingabeform unterschieden, da die Eingabegeräte nur in Großbuchstaben usw. verfügbar waren. Diese Dichotomie galt nicht für FORTRAN, sondern für a Anzahl anderer Sprachen.
Dan Halbert

5
@ kevincline: Würden Sie die Boeing 777 als allgemein gebräuchlich betrachten? Jede Zeile der Avionik-Software, die dieses Flugzeug fliegt, ist in Ada geschrieben.
John R. Strohm

2
@kevincline Skype: geschrieben in Delphi (Pascal) Microsoft hat versucht, dies zu ändern, nachdem sie es erworben haben, konnte es jedoch nicht erfolgreich portieren. Daher kaufen sie jetzt Delphi-Lizenzen. Schon mal in den USA ferngesehen? Die Station läuft wahrscheinlich auf Software von WideOrbit, die in Delphi geschrieben wurde. Sie sind mit großem Abstand Marktführer. Warst du schon mal in einem Themenpark? Es ist gut möglich, dass das Ticketing-System in Delphi geschrieben wurde. Pascal ist überall; Es ist nur so, dass es einen so starken Wettbewerbsvorteil bietet, dass viele Leute versuchen, darüber zu schweigen, damit ihre Konkurrenten es nicht herausfinden.
Mason Wheeler

14

Warum kein anderes Symbol?

Einige Sprachen haben andere Symbole verwendet - alte Versionen von BASIC verwendeten stattdessen zum Beispiel einen Doppelpunkt.

Wenn man die wenigen Ausnahmen ignoriert, gibt es meines Erachtens zwei Hauptgründe. Das erste ist, dass Sie einfach nach etwas Eindeutigem suchen. Wenn in einem typischen Parser ein ausreichend schwerwiegender Fehler auftritt, mit dem Sie die aktuelle Anweisung nicht weiter analysieren können, versuchen Sie normalerweise, den Parser wieder zu synchronisieren, indem Sie einfach zum Anweisungsabschluss springen und den Parser von der aus neu starten Beginn der nächsten Aussage. Zu diesem Zweck möchten Sie etwas, das normalerweise nirgendwo anders im Code vorkommt, und ein Semikolon ist zufällig ein Symbol mit wenig anderer Bedeutung, sodass es ziemlich einfach ist, es diesem Zweck zu widmen.

Der zweite Grund ist etwas ähnlich, zielt jedoch mehr auf Leute ab, die den Code lesen / benutzen. Wieder kommt es auf die Tatsache zurück, dass das tatsächliche Symbol, das Sie verwenden, nicht viel ausmacht. Die Lesbarkeit hat einen erheblichen Vorteil, wenn Sie das Symbol verwenden, das Ihr Leser für einen bestimmten Zweck zu sehen gewohnt ist, wenn und wann immer dies möglich ist. Das bedeutet nicht, dass C die perfekte Syntax ist und alles andere sklavisch folgen sollte, aber es bedeutet, dass genug Leute mit diesem Syntaxstil vertraut sind, dass eine vage ähnliche Sprache durch das Befolgen viel (und sehr wenig) verliert ungefähr die gleiche Syntax, wo es kann.

Ich stelle fest, dass dies dem Entwerfen von fast jedem anderen Programm ähnelt. Wenn ich ein Programm schreibe, das Windows verwendet, werde ich versuchen, nur die nativen Funktionen der Zielplattform (en) zu verwenden. Viele der Entscheidungen, die verkörpert werden, sind größtenteils willkürlich und können anders getroffen werden, ohne dass die Funktionalität wesentlich beeinträchtigt wird. Ebenso verwirrt eine Änderung der Entscheidungen die Benutzer, ohne dass sie etwas Nützliches bewirken. Die gleichen Grundprinzipien gelten für "Was sollte Aussagen in einer Sprache beenden (oder trennen)?" als "wie sollte eine Bildlaufleiste aussehen" oder "wie sollte ein Tree Control funktionieren?" In all diesen Fällen ist die Entscheidung größtenteils willkürlich, und die Einheitlichkeit bietet an und für sich einen erheblichen Vorteil.

Ich würde hinzufügen, dass in vielen Sprachen das Gleiche passiert, nur so, wie es die meisten von uns vor dem Programmieren gewohnt sind, dass nur wenige Leute darüber nachdenken. Warum verwendet jeder "+", um die Addition anzuzeigen, oder "-", um die Subtraktion anzuzeigen? Weil die Form des Symbols nicht viel ausmacht, aber jeder, der sich einverstanden erklärt, jedem Symbol die gleiche Bedeutung zu geben, ist sehr wichtig.


Sehr gute Punkte (+1), obwohl ich dem "meist willkürlichen" Teil nicht ganz zustimmen kann. Ich denke, es gibt definitiv einige Dinge, die intuitiver sind und andere, die weniger intuitiv sind. Wenn Windows ein X zum Schließen von Fenstern verwendet, gibt es einige (möglicherweise nur vage verbundene) bereits vorhandene Symbole, auf die es zurückgreift. Bei der Verwendung von Farben in OS X gibt es eine starke Symbolik, auf die es zurückgreift. (Ich ignoriere für den Moment, dass M $ Windows das X von X Windows gestohlen hat, da ich mich nicht erinnere, was das verwendet hat.)
iconoclast

3
@Brandon: Ich wollte mit Sicherheit nicht sagen, dass alle Teile des GUI-Designs willkürlich sind - vielleicht hätte ich "einige" statt "die meisten" sagen sollen. Es wäre nicht X, das eine bestimmte Form für das Symbol "Fenster schließen" definiert hätte - das wäre Sache eines einzelnen Fenstermanagers.
Jerry Coffin

Soweit ich mich erinnere, verwendete das ursprüngliche Dartmouth BASIC nur den Wagenrücklauf, um Anweisungen zu beenden (dh eine Anweisung pro Zeile). Ich denke, mehrere Anweisungen in einer durch Doppelpunkte getrennten Zeile waren eine Erweiterung von Microsoft.
John R. Strohm

7

Semikolons wurde ursprünglich in Algol 60 als Erklärung vorgeschlagen Separator , kein Terminator.

Vor Algol 60 war Fortran die einzige Programmiersprache auf hoher Ebene, für die jede Anweisung in einer eigenen Zeile stehen musste. Anweisungen, die sich über mehrere Zeilen erstrecken, wurden wie Do-Loops als merkwürdig und als Anweisungsblöcke angesehen.

Die Designer von Algol 60 haben erkannt, dass Anweisungen eine hierarchische Struktur benötigen (Wenn-Dann-Andern, Do-Loops, Case-Anweisungen usw.) und ineinander verschachtelt werden können. Die Idee, dass jede Aussage in einer eigenen Zeile steht, ergab also keinen Sinn mehr. Sequenzielle Zusammensetzung von Aussagen der Form S1; S2; ...; Sn optional eingeschlossen in beginnen - Ende Klammern genannt wurden zusammengesetzte Anweisungen und passen in die hierarchische Struktur von Aussagen von Algol ins Auge gefasst 60. So, hier das Semikolon eindeutig eine Aussage Separator , kein Terminator.

Dies führte in der Praxis zu Problemen. Algol 60 hatte auch eine "leere Aussage", die durch das Schreiben von nichts angezeigt wurde. Man könnte also " begin S1; end " schreiben, wenn das Semikolon so erscheint, als würde es S1 beenden. Aber der Algol 60-Compiler hat es wirklich als Trennzeichen zwischen S1 und einer unsichtbaren leeren Anweisung behandelt, die darauf folgt. Diese Feinheiten waren für praktische Programmierer ein bisschen viel. Nachdem sie an zeilenorientierte Sprachen wie Assembly und Fortran gewöhnt waren, dachten sie wirklich an Semikolon als Terminator für Anweisungen. Wenn Programme geschrieben wurden, wurde normalerweise ein Semikolon an das Ende der Anweisungen gesetzt, wie folgt:

    a [i]: = 0;
    i: = i + 1

und das Semikolon sah wirklich wie ein Abschlusszeichen für die erste Anweisung aus. Wenn die Programmierer das Semikolon als Abschlusszeichen behandeln würden, würde die folgende Anweisung einen Syntaxfehler ergeben:

    wenn ich> 0 dann
      a [i]: = 0;
    sonst
      a [i]: = 1;

weil das Semikolon das "wenn" abbricht und so das "sonst" baumelt. Die Programmierer waren zutiefst verwirrt.

Daher hat PL / I, der Nachfolger von IBM für das zeilenorientierte Fortran, beschlossen, das Semikolon nicht als Trennzeichen , sondern als Abschlusszeichen für Anweisungen zu verwenden. Die Programmierer waren mit dieser Wahl zufrieden. Die Mehrzahl der Programmiersprachen folgte. (Pascal widersetzte sich dem Trend, aber sein Nachfolger Ada gab es auf.)

[Anmerkung hinzugefügt: Wikipedia-Artikel über Programmiersprachenvergleiche enthält eine schöne Tabelle, in der zusammengefasst ist, wie Semikolon in verschiedenen Programmiersprachen behandelt wird.]


6

Dies ist eine reine Vermutungsarbeit, aber wenn man sich eine Standard-QWERTZ-Tastatur ansieht, die auf ASCII-Werte beschränkt ist, wären die natürlichen Zeichen für die Beendigung / Trennung.!?,:; und Wagenrücklauf. von denen!?: sollte sofort für die Annahme mehrerer Schlüssel disqualifiziert werden und die Beendigung der Anweisung wird eine sehr häufige Sache sein. Perioden würden disqualifiziert, weil sie leicht mit Dezimalstellen verwechselt werden, was sie angesichts des begrenzten Platzes der ursprünglichen Computer unnötig kompliziert machen würde, ein Terminator zu sein. Zeilenumbrüche würden disqualifiziert, wenn die Codezeilen möglicherweise länger als die auf einer einzelnen Zeile auf dem Bildschirm angezeigten sind. Daher wäre es schwieriger, ein Programm zu lesen, wenn Zeilen horizontal gescrollt werden müssten. Oder Sie benötigen zusätzliche Zeichen, um eine Fortsetzung in der nächsten Zeile zu erstellen, was wiederum die Komplexität erhöht. das lässt, und; von diesen wird als Option viel häufiger schriftlich verwendet als; Daher wird das Semikolon gewählt, weil es einfacher zu tippen ist, weniger verwirrend, weil es einem Zeichen mit begrenzter Bedeutung eine Bedeutung hinzufügt, und weniger kompliziert, weil Sonderfälle bei seiner Verwendung nicht wirklich existieren.

Das Semikolon wurde gewählt, weil es aufgrund seiner Faulheit und Einfachheit das beste Zeichen war.


Sie haben hier einen guten Punkt; Ich würde nur "gewählt" (was schwer zu beweisen ist) umformulieren in "... Das Semikolon hat gewonnen, weil es der beste Charakter war, der auf Faulheit und Einfachheit basiert"
gnat

2
Kaum. Semikolon als Abschluss- / Trennzeichen für Anweisungen begann bei ALGOL (1958), das vor ASCII lag (Arbeit begann 1960, erste Veröffentlichung 1963, Hauptveröffentlichung 1967, letzte Aktualisierung 1986).
John R. Strohm

@ JohnR.Strohm Nun, das ist eine Neuigkeit für mich, aber all dies ist für mich eine ziemlich alte Geschichte
Ryathal

6
Dies ist eine großartige Theorie, aber die Realität ist, dass Tastatureingaben eine Umschalttaste erforderten, um zum Semikolon zu gelangen, bis die moderne Tastatureingabe in den 70er Jahren erschien. (Es gibt mehrere gute Fotos im unteren Bereich des Wiki-Artikels: en.wikipedia.org/wiki/Keypunch ) Es basiert höchstwahrscheinlich nur auf den Regeln der natürlichen englischen Sprache, eine Modeerscheinung, die zur gleichen Zeit besonders beliebt war. (Ich würde alle Sprachen der späten 50er Jahre einschließen: ALGOL, FORTRAN, COBOL und SQL, ausgenommen LISP.) Das Semikolon von ALGOL ist nur eine von vielen verwendeten Konventionen in englischer Sprache, die BASIC später weiter erweiterte.
SilverbackNet

@SilverbackNet, weshalb "reine Rätselraten" hier wohl nicht die Grundlage einer Antwort sein sollte.
user1717828

6

Es ist größtenteils eine willkürliche Wahl. Einige Sprachen haben andere Entscheidungen getroffen. COBOL beendet Anweisungen mit dem .Zeichen. FORTRAN, BASIC und Python beenden Anweisungen im Allgemeinen mit Zeilenumbrüchen (mit spezieller Syntax für mehrzeilige Anweisungen). Und Lisp setzt seine Aussagen in Klammern.

Der Hauptgrund ;, der als Trennzeichen / Abschlusszeichen für Anweisungen so beliebt ist, ist, dass die meisten der heute gängigen Sprachen auf ALGOL basieren , das diese Konvention verwendet.

anstelle eines anderen Symbols?

Welches andere Symbol könntest du wählen?

Die ASCII-Zeichen # $ @ [] ^ _ `{|} ~ waren in frühen Zeichenkodierungen wie ISO 646 nicht immer vorhanden .

Die Zeichen ()*+-/<=>werden normalerweise als mathematische Operatoren verwendet und würden bei Verwendung als Anweisungsabschlusszeichen zu mehrdeutigen Syntaxanalysen führen.

product = a * b *  // If '*' were a statement terminator,
c * d *            // Are there two factors, or four?

Ähnliche Probleme würden bei 'und auftreten ", die typischerweise als Zeichenkettenbegrenzer verwendet werden. ,, das normalerweise zum Trennen von Funktionsargumenten verwendet wird, und .das normalerweise als Dezimalpunkt (oder als Begrenzer in Konstrukten wie some_struct.some_field) verwendet wird.

Das geht !%&:;?.

Die Wahl von !oder ?würde wahrscheinlich keine technischen Schwierigkeiten verursachen, aber ihre englische Bedeutung würde dem Programm die falsche Stimmung verleihen.

print(x)?  # Yes, you should.
           # It's an IMPERATIVE language; stop questioning my commands.
print(x)!  # OK!  You don't have to shout!

Das &wäre eine vernünftigere Wahl als Anweisungstrennzeichen (nicht als Abschlusszeichen), weil

do_thing_a() &
do_thing_b()

kann als Befehl gelesen werden, um etwas A und dann etwas B zu tun. Die meisten Sprachen mit einem &Operator verwenden es jedoch als logisches oder bitweises UND .

Das %Vorzeichen kann in Anweisungen wie verwirrend sein interest_rate = 2.99%(die die Variable auf 2.99anstelle der erwarteten setzen würden 0.0299). Natürlich hat die bekannte mathematische Bedeutung von %C nicht daran gehindert, sie als Restoperator zu verwenden.

Also das geht :und ;.

: ist eine vernünftige Wahl und wird in der Tat in den meisten Dialekten von BASIC als Trennzeichen zwischen Zeilen verwendet.

Hat ;aber die englische Grammatik auf seiner Seite; Es kann verwendet werden, um Klauseln innerhalb eines Satzes zu trennen.


3

Anstatt zu versuchen, Ihre Leitfrage zu beantworten, ist es meiner Meinung nach besser, sich auf Ihre implizite Frage zu konzentrieren:

Ich möchte die Geschichte hinter dieser Entscheidung kennen und hoffe, dass die Antworten zu Einsichten führen, die zukünftige Entscheidungen bei der Gestaltung und Implementierung von Programmiersprachen beeinflussen können.

Wenn Sie mehr über das Design und die Implementierungshistorie von Programmiersprachen erfahren und einen besseren Einblick in den Prozess erhalten möchten, ist der Ablauf der Konferenz zur Geschichte der Programmiersprachen ein sehr guter Anfang. (Ich denke, Sie benötigen eine ACM-Mitgliedschaft, um auf das Verfahren zugreifen zu können.)

Warum werden Anweisungen in vielen Programmiersprachen mit Semikolons abgeschlossen? Gibt es einen Grund, warum ein Semikolon anstelle eines anderen Symbols als Zeilenabschluss gewählt wurde?

Anhand Ihrer Überschriftenfrage als Beispielfrage, die Sie möglicherweise anhand des HOPL-Verfahrens beantworten möchten, möchte ich Folgendes anführen: Leute, die eine neue Programmiersprache entwerfen, tun dies normalerweise, weil sie die betrachten, die sie kennen irgendwie kaputt / mangelhaft. Ihre neue Sprache soll einerseits diesen Mangel beheben. Andererseits kopieren Sprachdesigner auch Designelemente aus anderen Sprachen, die sie für gut halten, oder ändern einfach nicht die Elemente, mit denen sie kein Problem hatten.

Insbesondere der letzte Teil ist wichtig: Anstatt herauszufinden, welche Programmiersprache als erstes Semikolon als Abschlusszeichen verwendet hat und warum viele andere Programmiersprachen dies kopiert haben, werden Sie wahrscheinlich mehr lernen, indem Sie sich Sprachen ansehen, die nicht kopiert wurden es. Smalltalk zum Beispiel ließ sich zwar stark von Simula inspirieren, tat es aber nichtKopieren Sie die Syntax und insbesondere die Verwendung von Semikolons als Abschlusszeichen. Es hat die Abschlusszeichen (Trennzeichen wirklich) zu einem Punkt geändert und verwendet das Semikolon für etwas anderes. Umgekehrt könnte die erste Sprache, die jemals ein Semikolon als Anweisungsabschluss verwendet hat, einen Grund gehabt haben, dies von der Sprache zu ändern, die zuvor verwendet wurde. Es ist auch möglich, dass es die erste Sprache war, die das gesamte Konzept eines Anweisungsabschlusszeichens eingeführt hat (oder dies unabhängig von anderen Sprachen getan hat), und dass das Semikolon aus irgendeinem Grund verwendet wurde, der jetzt für die Zeit verloren ist. (Ich vermute, dass letzteres der Fall ist, da keiner der anderen Befragten in der Lage war, ein Zitat von der Person zu erheben, die das Semikolon eingeführt hat, anstatt nachgerüstete Annahmen darüber zu machen, warum das Semikolon eine gute Wahl war.) Punkt, Ich denke, Sie werden mehr lernen, wenn Sie sich ansehen, warum Sprachdesigner Dinge geändert haben, anstatt warum sie sie kopiert / aufbewahrt haben. Wenn Menschen Dinge ändern, die sie normalerweise wollen oder erklären müssen, tun sie dies nicht, wenn sie Dinge kopieren oder beibehalten, weil „warum sollten wir es ändern? So wird's gemacht! “


2

Es geht um Sichtbarkeit.

Frühe Anweisungstrennzeichen waren das '.' wie in COBOL und neuer Zeile, Wagenrücklauf in FORTRAN.

Die CR erwies sich als einschränkend, da es schwierig ist, eine Aussage über mehrere Zeilen zu verteilen.

Punkthaltigkeit verursachte ein interessanteres Problem. Wenn Sie englischen Text lesen, verarbeitet Ihr Gehirn die Punkte auf einer unterschwelligen Ebene. Sie sind sich bewusst, dass ein Satz beendet ist, und Sie können eine Atempause einlegen, aber Sie bemerken das nicht wirklich. das signalisierte es. Auch in vielen Schriften das '.' ist das kleinstmögliche Zeichen, das manchmal als einzelnes Pixel gerendert wird. Fehlende oder zusätzliche Punkte waren die häufigste Fehlerursache in COBOL-Programmen.

Aus frühen Fehlern lernen ALGOL wählt also einen bestimmten Terminator aus, der den Ablauf einer Anweisung über mehrere Zeilen hinweg ermöglicht, und einen, der für den menschlichen Leser sichtbar und leicht erkennbar ist. Das Semikolon ist im gewöhnlichen Englisch sowohl groß als auch ungewöhnlich genug, um nicht unbewusst verarbeitet zu werden.


1

Meines Erachtens wurde es gewählt, weil ein expliziter Anweisungsabschluss erforderlich war, der sich von einem Wagenrücklauf / einer neuen Zeile unterscheidet. In den Tagen von 80-Spalten-Bildschirmen war es häufig genug, eine einzige Codezeile über mehrere Zeilen zu verteilen, sodass die Verwendung von \ r oder \ n für den Anweisungsabschluss nicht funktioniert.

Semikolons waren nur praktisch, weil sie in logischen / mathematischen Anweisungen nicht verwendet werden. Insofern stehen sie in keinem wesentlichen Widerspruch zum tatsächlichen Inhalt der Aussagen.


Persönlich halte ich die fortgesetzte Verwendung des Semikolons zusammen mit den Stilanforderungen, um Zeilen unter 80 Zeichen zu halten, für aufrichtig dumm und anachronistisch. Sprachen wie Python haben ausführlich demonstriert, dass Sie ohne sie leichter verständlichen und prägnanten Code schreiben können. Wenn Sie Probleme mit Zeilen haben, die länger als 80 Zeichen sind, benötigen Sie einen größeren Monitor.


3
Zurück im dunklen Alter gab es keine "80-Spalten-Bildschirme". Es gab Lochkarten mit 80 Spalten und Drucker mit unterschiedlicher Spaltenanzahl. (Ungefähr 130 waren üblich.) FORTRAN beendete die Kontoauszüge am Ende der Karte, erlaubte es jedoch, dass Fortsetzungskarten die Kontoauszüge fortsetzten. Fortsetzungskarten wurden durch ein in Spalte 6 der Karte gestanztes Zeichen gekennzeichnet. (Jedes Zeichen würde funktionieren. Abhängig von der örtlichen Konvention würden Sie normalerweise entweder ein + -Zeichen oder eine einzelne Ziffer sehen, wobei die Ziffern für mehrere Fortsetzungskarten hochgezählt werden.)
John R. Strohm

1
Eine Sprache wie Python wäre für die Computer, die in den frühen Tagen von C existierten, nicht realisierbar gewesen. Die Verwendung eines Anweisungsbeendigungszeichens vereinfacht das Parsen, und es war vor Jahrzehnten sehr wichtig, den Arbeitsspeicher und die CPU-Auslastung von Compilern zu reduzieren. Vor allem auf Computern, auf denen Sie sekundenweise für die CPU-Zeit bezahlt haben.
Gigatron

@ Gigatron - Ich bezog mich nur auf die Verwendung von Wagenrückläufen, um eine Anweisung zu beenden, und nicht auf einen der übergeordneten Aspekte von Python.
Fake Name

1
@Gigatron, vielleicht möchten Sie einen Blick auf LISP werfen und insbesondere auf die frühe Geschichte des IBM 704. Sie werden überrascht sein, was die Alten tun könnten, selbst wenn sie mit Steinmessern und Bärenfellen arbeiten.
John R. Strohm

1
@ Gigatron: FORTRAN lief auf denselben Computern und verwendet Zeilenumbrüche, um Anweisungen zu trennen (mit spezieller Syntax für mehrzeilige Anweisungen).
Dan04

0

Hier sind zwei Fragen: Warum ALGOL Semikolon bekam und warum andere Sprachen danach gingen.

Die erste Frage wird hier bereits auf vielfältige Weise beantwortet.

Als zweite wurde The ALGOL sehr häufig als Pseudocodesprache für das Schreiben von Algorithmen verwendet. So wurden Semikolons für Benutzer verschiedener Sprachen schnell zur Selbstverständlichkeit. Und natürlich wurden sie für die jüngeren Sprachen genommen.


0

Ich könnte mich irren, aber ich denke, das hat etwas damit zu tun, dass in vielen Assemblern ein Semikolon verwendet wurde, um einen Kommentar zu beginnen, der normalerweise nach einer Anweisung gesetzt wird. Alles nach a ;war ein Kommentar und nicht mehr Teil der Anweisung.

In diesem Fall müssen die Anweisungen beendet werden, wenn Sie sie in einen Interpreter eingeben. Kurzbefehle (z. B. mathematische Ausdrücke) können durch einfaches Drücken der Eingabetaste beendet werden, um dem Interpreter mitzuteilen, dass der Ausdruck berechnet werden kann und ein Ergebnis liefert. Manchmal wollte man jedoch mehrere Codezeilen für den Befehl eingeben. Eine Möglichkeit, dies zu erreichen, bestand darin, ein Sonderzeichen als Abschlusszeichen für den Befehl zu verwenden, anstatt nur von der Eingabetaste abzuhängen. Auf diese Weise kann der Benutzer mehrere Codezeilen gleichzeitig eingeben, da die Eingabetaste sie noch nicht an den Interpreter gesendet hat. Erst wenn der Interpreter das Abschlusszeichen in einer mit Enter eingegebenen Zeile findet, führt er es endgültig aus und berechnet sein Ergebnis.

Kombinieren Sie nun diese beiden Dinge, und das Semikolon scheint eine naheliegende Wahl für das abschließende Zeichen zu sein: Es gibt an, wo der Anweisungsteil endet und der Kommentarteil beginnt Alle Zeilen des Ausdrucks wurden bisher gepuffert und ausgeführt, da die Anweisung gerade beendet wurde. Jetzt befinden wir uns in einem Kommentar (zumindest bis zum Ende dieser Zeile, da die nächste Zeile im Code beginnt wieder in den Modus, einen neuen Ausdruck / eine neue Anweisung beginnen).

Dies setzt natürlich voraus, dass es wirklich das Semikolon war, das für Kommentare von der Person verwendet wurde, die auf die Idee gekommen ist, es als Anweisungsbeendigungszeichen wiederzuverwenden. Wäre es irgendein anderes Zeichen gewesen, hätten wir möglicherweise einen anderen Anweisungsabschluss erhalten.

Inb4: Nein, dies ist kein historischer Bericht. Ich habe keine Beweise dafür, dass Semikolons auf diese Weise zum Leben erweckt wurden. Es ist nur so, wie ich es mir vorstellen kann.


-1

Die meisten Sprachen verwendeten das Semikolon, da es zu diesem Zweck bereits weit verbreitet war und Änderungen keinen Sinn machten.

Und wenn Sie die ersten Sprachen berücksichtigen, die diese Wahl treffen, müssen Sie sich überlegen, welche Alternativen es gibt. Wenn Sie eine Sprache entwerfen, möchten Sie, dass die erforderlichen Zeichen verfügbar sind. Zu diesem Zeitpunkt wurden die Zeichensätze mit 6 Bits codiert, wobei häufig einige Muster reserviert und einige Zeichen nicht fest definiert sind nationalen Varianten der ISO-646 - die US - Variante kennen ist auch unter dem Namen ASCII - , die die Codes für „gemeinsame“ Zeichen wiederverwenden wie [, #oder $, und die Wirkung in einem Kontext sehen , wo es nur halb so viele Codepositionen sind und Buchstaben und Ziffern, von denen mehr als die Hälfte reserviert sind).

Es gab wahrscheinlich kein anderes Zeichen, das als Anweisungstrennzeichen so intuitiv verwendet werden konnte ( .ist wahrscheinlich bereits der einzige ernstzunehmende Anwärter für dieses Kriterium) und zu einer Zeit, als die Parsing- und Lexingtheorie noch in der Ausarbeitung war ( .ist ), ohne lexing- oder parsing-Schwierigkeiten einzuführen nicht in Frage wegen seiner Verwendung in reellen Zahlen).


-1

Ein weiterer Grund für die Verwendung von Semikolon ist, dass es sich um eines der Zeichen handelt, die wir nicht benötigen oder häufiger verwenden.

Nehmen wir an, wir verwenden es häufiger als Variablennamen oder ähnliches und wenn Semikolon als Schlüsselwort oder als Operator verwendet worden wäre, wäre dies ein Symbolkonflikt für den Compiler gewesen, daher war es wichtig, ein Symbol zu verwenden, das nicht verwendet wird oft in der Codierung verwendet.

Ich glaube, Programmiersprachen im C-Stil haben es populär gemacht, und dann wollten die Autoren neuer Programmiersprachen das Rad nicht neu erfinden, und sie haben es bis jetzt weiter verwendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.