Warum ist $ in Bezeichnernamen für so viele Sprachen?

15

Viele Skriptsprachen wie Perl, Awk, Bash, PHP usw. verwenden ein $ -Zeichen vor den Bezeichnernamen. Ich habe versucht, nachzuschlagen, warum, aber ich hatte nie eine zufriedenstellende Antwort.

rdasxy
quelle
10
Möglicherweise wegen des letzten Schritts in den Geschäftsplänen der meisten Programmierer - ... Profit!
Oded
2
Interessanter Beitrag zu SO bezüglich derselben Frage: Warum müssen Perl-Variablen mit $,%, @ (Sigillen) beginnen
Brad Christie

Antworten:

4

Die Bourne-Shell oder ihr Vorgänger war wahrscheinlich der Ursprung der Konvention. Shells $fooverweisen in der Regel auf eine Shell- oder Umgebungsvariable, während sie nur fooals Literalzeichenfolge verstanden werden (bei der es sich um einen Befehlsnamen, einen Dateinamen oder ein Wort handeln kann, das an einen anderen Befehl übergeben wird).

Es ist wahrscheinlich eine Frage der Minimierung, wie viel Sie eingeben müssen. In den meisten Programmiersprachen handelt es sich bei den meisten Eingaben um Schlüsselwörter (aus einem kleinen festen Satz) und Namen von deklarierten Elementen. Es ist sinnvoll, nur einen Namen für diese zu verwenden. Zeichenfolgenliterale werden in Anführungszeichen (einfach oder doppelt) gesetzt, um sie syntaktisch zu unterscheiden.

In einer interaktiven Shell handelt es sich bei den meisten Eingaben um Befehlsnamen und Dateinamen. Daher ist es sinnvoll, eine nicht dekorierte Form für sie zu haben. Variablennamen werden nicht so oft verwendet, daher $ist es eine einfache Möglichkeit, sie zu unterscheiden, wenn Sie ihnen voranstellen .

Das Nachziehen $, das einige BASICs für Zeichenfolgenvariablen (im Gegensatz zu numerischen Variablen) verwenden, war wahrscheinlich ebenfalls eine Inspiration.

Perls Wahl $für skalare Variablen wurde zweifellos von Shells wie der Bourne-Shell und frühen Versionen von Perl inspiriert, die Barewords häufig als String-Literale behandelten ( print FOOund print "FOO"äquivalent waren). Diese Verwendung von Barewords wurde in neueren Versionen von Perl nicht mehr empfohlen, die Siegel bleiben jedoch erhalten und werden hauptsächlich zur Unterscheidung verschiedener Arten von Variablen verwendet. Wenn Perl von Grund auf neu entwickelt würde, könnten skalare Variablen mit einem "leeren Siegel" gekennzeichnet werden, aber das ist nicht geschehen.

(Übrigens, Awk verwendet keine Siegel. Es hat eine $Syntax, bezieht sich aber auf Feldnummern. Ist NFdie Anzahl der Felder; $NFist das letzte (das NFth) Feld.)

Keith Thompson
quelle
3
Nur eine Randnotiz: Bourne Shell (1977) , BASIC (1964) .
Steven Jeuris
14

Ein $ -Zeichen im Variablennamen ist ein Sonderfall von "Sigil" . In den Anfängen von BASIC (1964 oder so) wurde $ verwendet, um Zeichenfolgenvariablennamen zu kennzeichnen. Meine Vermutung ist, dass es für Compiler einfacher ist, Variablennamen mit Hilfe eines Symbols vom Rest der Grammatik zu trennen, und seitdem es in BASIC üblich war, hat seine Verwendung Fortschritte gemacht. Dies ist jedoch nicht die einzige, die verwendet wird.

Keine Chance
quelle
2
Das $für Zeichenfolgen (und %für Ganzzahlen) in Basic war ein Suffix und kein Präfix, zumindest in den (nicht standardmäßigen) Varianten, die mir zugefügt wurden. Natürlich nicht, dass das von Bedeutung ist - Suffix gegen Präfix ist ziemlich oberflächlich, zumindest was Compiler und lexikalische Analysen angeht. In Bezug auf die Lesbarkeit kann es zu geringfügigen Unterschieden kommen.
Steve314
Übrigens - ein Grund, warum es in Basic funktioniert hat, ist, dass es nur einen sehr begrenzten Bereich von Typen und keine benutzerdefinierten Typen gab, sodass nur ein sehr begrenzter Bereich von Siegeln benötigt wurde. Die Verwendung von Perl ist anders - obwohl es für mich schon lange her ist, kann ich mich nicht wirklich an Details erinnern.
Steve314
@ steve314, du bist absolut korrekt A $ = ... Danke, dass du das bemerkt hast.
NoChance
5

awk?

Wird manchmal als Siegel bezeichnet und im Allgemeinen zum Umsetzen der Namen von Variablen (und anderen) in Werte verwendet.

Jé Queue
quelle
5

Dies scheint auf BASIC zurückzuführen zu sein, wobei das Suffix $ eine Zeichenfolgenvariable angibt und auch als "Zeichenfolge" ausgesprochen wurde. Beispielsweise wird INKEY $ "in Schlüsselzeichenfolge" ausgesprochen.

Aber warum das Dollarzeichen? Nun, $ sieht ein bisschen aus wie S für String. Und laut Wikipedia :

Da das Dollarzeichen eines der wenigen Symbole ist, die einerseits in Computerzeichensätzen fast überall vorkommen, andererseits aber in Computersoftware in ihrer wörtlichen Bedeutung selten benötigt werden, wurde das Zeichen $ auf Computern verwendet für viele Zwecke, die nichts mit Geld zu tun haben.

(Passenderweise ist für ein paar Dollar mehr im Fernsehen zu sehen, während ich dies tippe.)

Hugo
quelle
2

Warum nicht? Es ist einfacher, ein Lexer zu schreiben, das angibt, dass ein Bezeichner eine Variable sein wird (und folglich einfacher, den Parser zu schreiben), insbesondere für eine interpretierte Sprache. Was den Grund angeht $, so ist dies wahrscheinlich größtenteils Tradition - einer der Schöpfer einer frühen Sprache, die das Konstrukt verwendet (Bash? Oder wahrscheinlich ein Vorgänger davon), hat es aus irgendeinem Grund verwendet und nachfolgende Sprachen haben es übernommen.

Kevin
quelle
1
Es macht das Schreiben von Lexer und Parser möglicherweise nicht wesentlich einfacher, macht jedoch reservierte Wörter überflüssig.
TomG