Es ist nicht wirklich ein Problem für jeden, der sich zuvor mit diesem syntaktischen Problem befasst hat, aber ich sehe eine Menge Verwirrung, die sich aus der Verwendung von caret ( ^
) als XOR-Operation anstelle der allgemein akzeptierten mathematischen Potenzierungsoperation ergibt.
Natürlich gibt es viele Stellen, an denen der (falsche) Gebrauch des Carets erklärt und korrigiert wird, aber ich habe keine endgültigen Quellen gefunden, warum dem Caret eine andere Bedeutung beigemessen wurde.
War es eine Frage der Bequemlichkeit? Ein Unfall? Offensichtlich könnte die Begründung für die verschiedenen Sprachen unterschiedlich sein, so dass Informationen in jeder Hinsicht aufschlussreich wären.
Antworten:
Obwohl es ältere Vorläufer gab, wird dem einflussreichen französischen Mathematiker Rene Descartes in seiner 1637 veröffentlichten Arbeit Geometrie in der Regel die Einführung hochgestellter Exponenten (a b ) in das mathematische Schreiben zugeschrieben . Diese Notation wird in der Mathematik bis heute allgemein verwendet.
Fortran ist die älteste Programmiersprache, die häufig für numerische Berechnungen verwendet wird und einen Exponentiationsoperator bereitstellt. Sie stammt aus dem Jahr 1954. Die Exponentiationsoperation wird durch einen doppelten Stern gekennzeichnet
**
. Es ist zu beachten, dass viele Computer zu dieser Zeit 6-Bit-Zeichencodierungen verwendeten , die kein Caret-Zeichen lieferten^
. Die Verwendung von**
wurde später von Entwicklern verschiedener neuerer Programmiersprachen übernommen, die eine Potenzierungsoperation bieten, wie z. B. Python.Der erste weit verbreitete Zeichensatz, der das Caret enthielt,
^
war die 7-Bit- ASCII- Codierung, die 1963 zum ersten Mal standardisiert wurde. Die älteste mir bekannte Programmiersprache, die das Caret zur Bezeichnung der Exponentiation verwendete, ist BASIC, die auf das Jahr 1964 datiert Zu dieser Zeit übernahm IBM die EBCDIC- Zeichencodierung, die auch das Caret enthält^
.Die C-Sprache wurde 1972 eingeführt. Sie bietet keinen Exponentiationsoperator, sondern unterstützt die Exponentiation über Bibliotheksfunktionen wie
pow()
. Daher muss kein Symbol für die Exponentiation in C und in anderen, späteren Sprachen der C-Familie wie C ++ und CUDA reserviert werden.Andererseits und für Programmiersprachen bis zu diesem Zeitpunkt ungewöhnlich, stellt C Symbole für bitweise Operationen bereit. Die Anzahl der Sonderzeichen, die in 7-Bit-ASCII verfügbar waren, war begrenzt, und da es eine "natürliche Affinität" anderer Operationen zu bestimmten Sonderzeichen gab, z. B.
&
für AND und~
für NOT, gab es nicht allzu viele Auswahlmöglichkeiten für das Symbol für XOR .Mir ist keine veröffentlichte Begründung von Ritchie oder Kernighan bekannt, warum sie sich entschieden haben
^
, XOR spezifisch zu bezeichnen. Ritchies kurze Geschichte von C schweigt zu diesem Thema. Ein Blick auf die Spezifikation für den Vorläufer C, der Sprache B , zeigt , dass es nicht eine XOR - Operator hatte, aber schon alle Sonderzeichen außer verwendet^
,$
,@
,#
.[Update] Ich schickte eine E-Mail an Ken Thompson, den Schöpfer von B und einen der Mitschöpfer von C, und erkundigte mich nach den Gründen für die Wahl
^
als XOR-Operator von C und bat um die Erlaubnis, die Antwort hier zu teilen. Seine Antwort (aus Gründen der Lesbarkeit leicht neu formatiert):Die Verwendung von
^
für die Exponentiation in "Mathematik", auf die Sie sich beziehen, wird tatsächlich zu einem viel späteren Zeitpunkt für Schriftsatzsysteme wie Knuths TeX aus dem Jahr 1978, Befehlszeilenschnittstellen für Algebra-Systeme wie Mathematica aus dem Jahr 1988 und Graphik verwendet Taschenrechner in den frühen 1990er Jahren.Warum wurden diese Produkte
^
zur Potenzierung verwendet? Bei Taschenrechnern vermute ich den Einfluss von BASIC. In den achtziger Jahren war es eine sehr beliebte erste Programmiersprache und wurde auch in andere Softwareprodukte eingebettet. Die Schreibweise wäre daher vielen Käufern der Rechner geläufig gewesen. Mein Gedächtnis ist vage, aber ich glaube, es gab sogar Taschenrechner, auf denen einfache BASIC-Interpreter ausgeführt wurden.quelle
^
für hochgestellte . Und für mich ist es sinnvoll, ein "hoch" -Zeichen für hochgestellt und ein "runter" -Zeichen (_
) für tiefgestellt zu verwenden.^
einen Aufwärtspfeil vorschlägt, der wiederum auf die traditionelle Position eines hochgestellten Exponenten hinweist, so dass es ein bisschen wie ein natürlicher Fit ist. Ich bin mir sicher, dass Donald Knuth auf eine E - Mail antworten würde, in der er nach seiner Entscheidung^
für die Potenzierung in TeX gefragt wird, aber da er mit wichtigeren Dingen wie dem Abschluss von TAOCP beschäftigt ist, wollte ich diesen Schritt nicht machen (ich habe darüber nachgedacht) es).