Wie hat sich der Brauch entwickelt, eckige Klammern für Array-Elemente zu verwenden?

11

Viele Programmiersprachen verwenden die Syntax a[i], um auf das i'th Element eines Arrays, einer Sequenz oder eines Vektors zu verweisen a- speziell C und Pascal (aus den späten 1960er und frühen 1970er Jahren) tun dies. Andererseits verwenden einige frühere Sprachen, wie Fortran (aus den 1950er Jahren), diese Konvention nicht. Außerdem habe ich ein bisschen Mathematik studiert, und Mathematiker verwenden eckige Klammern für Intervalle und Indizes für Array- und Matrix-Subskriptionen (oder reguläre Klammern, wenn das Array als Funktion von nicht negativen ganzen Zahlen betrachtet wird).

Meine Frage lautet also: Wo / wie / in welchem ​​Kontext haben sich diese eckigen Klammern für das Array-Abonnement entwickelt und von wem?

Hinweis: Überhaupt kein Betrug dieser Frage zur Verwendung von geschweiften Klammern in C.

einpoklum
quelle
@gnat: Wie ist das ein Betrug davon?
Einpoklum
1
Verwandte, aber kein Betrüger.
Blaster
1
Die zweite Top-Antwort dort drüben behandelt die Geschichte der eckigen Klammern
Mücke
1
@ Paul Tippfehler. Sie meinen xkcd.com/163 (die xkdc-Domain ist in China registriert)
1201ProgramAlarm

Antworten:

10

Die Hauptvorläufersprache für C und Pascal war Algol . Die früheste Version davon war Algol 58 , bei dem eckige Klammern für Array-Deklarationen und Referenzen verwendet wurden.

Der Grund, warum Algol eckige Klammern anstelle von beispielsweise Klammern verwendete, war dreifach:

  1. weil sie konnten. Die frühen IBM-Tastaturen, mit denen Fortran entwickelt wurde, hatten nur Klammern. Dies hatte sich geändert, als Algol spezifiziert wurde.
  2. Die Erfahrung mit Fortran hatte gezeigt, dass Programmierer häufig mit der übermäßigen Verwendung von Klammern verwechselt wurden, sodass dies als wichtige syntaktische Änderung angesehen wurde.
  3. Die Absicht hinter Algol war, dass es zur Beschreibung von Algorithmen verwendet werden sollte, sodass es sinnvoll war, es näher an der mathematischen Standardnotation zu haben.

Beachten Sie, dass Algol im Gegensatz zu C, bei dem Arrays hauptsächlich zum Indizieren des Speichers verwendet werden, sowohl die unteren als auch die oberen Indexgrenzen angegeben werden konnte. Auch dies entsprach seiner eher mathematischen Absicht. So sehr, dass Algol viele Jahre lang de facto die Sprache für Pseudocode war.

Alex
quelle
Aber sind eckige Klammern der mathematischen Standardnotation wirklich näher? Als ich Match studierte, [x]wurde es für Äquivalenzklassen verwendet, nicht für Anzeigepositionen innerhalb von Vektoren oder Matrizen.
Einpoklum
2
@einpoklum Mehr für Bereiche in der Deklaration als Indizes oder hochgestellte Indizes in den Referenzen. Da sie jedoch mit der damaligen Technologie keine Indizes oder hochgestellten Indizes erstellen konnten, strebten sie nach visueller Konsistenz. Und sie strebten keine mathematische Vorstellung an, wie es beispielsweise APL tat. Sie wollten Algorithmen klar ausdrücken, was ein ziemlich enger Zweig ist.
Alex
Außerdem wurden für Intervalle eckige Klammern verwendet. Ich denke, das ist in gewissem Sinne wie Bereiche in einem Array. Sind Sie sicher, dass in Algol dieser Brauch begann?
Einpoklum
@einpoklum Ich bin sicher, dass die Verwendung von eckigen Klammern in C und Pascal von Algol kam. Die Abstammung ist ziemlich gut dokumentiert. Wenn es einen Vorgänger von Algol 58 gab, von dem die Designer die Syntax übernommen haben, weiß ich nichts davon. Es ist angesichts des Timings unwahrscheinlich, aber nicht unmöglich. Algol 58 wurde vor Algol 60 nicht implementiert, daher ist es möglich, dass eine nicht implementierte Sprache eine Inspiration war.
Alex
5

Dies ist eine interessante Lektüre: https://en.m.wikipedia.org/wiki/Bracket

Das Folgende sind meine eigenen Beobachtungen.

Die C-Designer haben die Bedeutung von Zeichen und Konstrukten, wie sie seit Hunderten von Jahren in regulärer Schriftsprache verwendet wurden, mit großer Sorgfalt übernommen. Dabei mussten sie mit der recht begrenzten Teilmenge der ASCII-Zeichen arbeiten. In der westlichen Sprache werden im geschriebenen Text mehr Gruppierungszeichen verwendet, aber diese haben es einfach nicht in ASCII geschafft.

In der regulären Sprache bedeutet die Bedeutung von Klammern, Nebeninformationen bereitzustellen, ohne die Hauptnachricht zu unterbrechen. Dies ist beim Aufrufen einer Prozedur sinnvoll: Die Hauptnachricht ist die auszuführende Aktion, und die Unterinformationen sind die Argumente.

Zum Gruppieren werden geschweifte Klammern verwendet. "Diese Wortsammlung gehört zusammen, soll sich von den anderen abheben". Daher ist es sinnvoll, sie für Codeblöcke und zusammengesetzte Anweisungen zu verwenden.

Eckige Klammern werden für Einfügungen in Text verwendet, die nicht Teil des Originals waren, um den Originaltext zu verdeutlichen und den Kontext bereitzustellen. Oder um eine Auslassung mit Auslassungspunkten anzuzeigen: [...]. "Sie [die Königin] war nicht amüsiert". In der Computerprogrammierung ist es ein wenig sinnvoll, die Klammer für die Array-Indizierung zu verwenden, da es sich um eine Art Kontext handelt, der bereitgestellt wird. "Array? Welches Array? Nun, speziell dieses Element." Aber selbst wenn die ursprüngliche Bedeutung die Verwendung in einer Computersprache nicht vollständig abdeckt, gibt es in ASCII nicht mehr viele Optionen.

Ich würde also sagen, dass es eine Kombination aus dem Stand der Technik und dem, was zu diesem Zeitpunkt verfügbar war, zur Verwendung von eckigen Klammern für die Array-Indizierung führte.

[wegen Alex 'Kommentar bearbeiten]

Laut dieser Quelle wurde ASCII 1963 eingeführt und 1968 von der Regierung genehmigt. Die Entwicklung der C-Sprache begann laut diesem Wiki erst 1969 . Es ist also wahrscheinlich, dass Mr. Ritchie diesen neuen, weit verbreiteten Standard namens ASCII bei der Auswahl seiner Charaktere im Auge behalten hat.

Bitte beachten Sie auch die anderen Antworten, die Algol, "die Mutter vieler Sprachen", vertreten und einen starken Einfluss haben.

Martin Maat
quelle
Ich glaube, ich verstehe, was Sie sagen, aber ASCII wurde erst fast ein Jahrzehnt nach dem Entwurf von C kodifiziert. Ein viel direkterer Einfluss war die Tastatur des PDP-11, für die C entwickelt wurde. Es ist sinnvoll, Zeichen zu verwenden, die unterstützt werden. Die Verwendung von eckigen Klammern für Arrays wurde direkt von Algol über BCPL und B inspiriert. Ähnlich für Pascal. Wirth implementierte Algol-W vor dem Entwurf von Pascal.
Alex