Perché $ è nei nomi identificativo per così tante lingue?


15

Molti linguaggi di scripting come Perl, Awk, Bash, PHP, ecc. Usano un segno $ prima dei nomi degli identificatori. Ho provato a cercare perché, ma non ho mai avuto una risposta soddisfacente.


10
Forse a causa dell'ultimo passo nei piani aziendali della maggior parte dei programmatori - ... profitto!
Oded,

2
Interessante post su SO relativo alla stessa domanda: perché le variabili Perl devono iniziare con $,%, @ (sigilli)
Brad Christie,

Risposte:


4

La shell Bourne o il suo predecessore fu probabilmente l'origine della convenzione. Le shell tendono ad usare $fooper fare riferimento a una variabile shell o variabile d'ambiente, mentre just fooviene preso come una stringa letterale (che potrebbe essere un nome di comando, un nome di file o solo una parola da passare a un altro comando).

Probabilmente si tratta di ridurre al minimo quanto devi scrivere. Nella maggior parte dei linguaggi di programmazione, la maggior parte di ciò che digiti saranno parole chiave (da un piccolo set fisso) e nomi di cose che sono state dichiarate; ha senso usare solo un nome per quelli. I letterali stringa sono racchiusi tra virgolette (singole o doppie) per distinguerli sintatticamente.

In una shell interattiva, la maggior parte delle cose che scrivi saranno nomi di comandi e nomi di file, quindi avere una forma non decorata per loro ha senso. I nomi delle variabili non vengono usati abbastanza spesso, quindi precederli $è un modo semplice per distinguerli.

Anche il trascinamento $che alcuni BASIC usano per le variabili stringa (al contrario delle variabili numeriche) è stato probabilmente anche una fonte d'ispirazione.

La scelta di Perl da utilizzare $per le variabili scalari è stata senza dubbio ispirata da shell come la shell Bourne, e le prime versioni di Perl comunemente trattavano le parole nude come letterali stringa ( print FOOed print "FOO"erano equivalenti). Questo uso delle parole nude è stato deprecato nelle versioni più moderne di Perl, ma i sigilli rimangono e vengono principalmente utilizzati per distinguere diversi tipi di variabili. Forse se il Perl fosse progettato da zero, le variabili scalari potrebbero essere indicate da un "sigillo vuoto", ma ciò non accadrebbe.

(A proposito, Awk non usa sigilli. Ha una $sintassi, ma si riferisce ai numeri di campo. NFÈ il numero di campi; $NFè l'ultimo (il NFth) campo.)



14

Un $ sign in nome variabile è un caso speciale di "Sigil" , Ai primi tempi di BASIC (1964 o giù di lì) $ veniva usato per indicare i nomi delle variabili stringa. La mia ipotesi è che, poiché rende più facile per i compilatori separare i nomi delle variabili dal resto della grammatica usando alcuni simboli, e poiché era comune a BASIC, il suo utilizzo è progredito. Tuttavia, questo non è l'unico utilizzato.


2
Le $stringhe for (e %for integer) in Basic erano un suffisso anziché un prefisso, almeno nelle varianti (non standard) che mi venivano inflitte. Non che ciò sia significativo, ovviamente: il suffisso contro il prefisso è piuttosto superficiale, almeno per quanto riguarda i compilatori e l'analisi lessicale. Potrebbe esserci una leggera differenza in termini di leggibilità.
Steve314

A proposito, uno dei motivi per cui ha funzionato in Basic è che c'era una gamma molto limitata di tipi e nessun tipo definito dall'utente, quindi era necessaria solo una gamma molto limitata di sigilli. L'uso del Perl è diverso, anche se ormai è passato molto tempo da me, quindi non ricordo davvero i dettagli.
Steve314

@ steve314, hai assolutamente ragione A $ = ... Grazie per averlo notato.
NoChance,

5

awk?

A volte chiamato sigillo , generalmente usato per tradurre i nomi di variabili (e altri) in valori.


5

Questo sembra avere origine in BASIC, dove il suffisso $ indica una variabile stringa ed è stato anche pronunciato come "stringa". Ad esempio, INKEY $ è pronunciato "nella stringa di chiavi".

Ma perché il simbolo del dollaro? Bene, $ assomiglia un po 'a S per stringa. E secondo Wikipedia :

Poiché il simbolo del dollaro è uno dei pochi simboli che è, da un lato, presente quasi universalmente nei set di caratteri del computer, ma, dall'altro lato, raramente è necessario nel loro significato letterale all'interno del software per computer, il carattere $ è stato usato sui computer per molti scopi estranei al denaro.

(Appropriatamente, per qualche dollaro in più è in TV mentre scrivo questo.)


2

Perchè no? È più facile scrivere un lexer in grado di dire che un identificatore sarà una variabile (e di conseguenza più facile scrivere il parser), specialmente per un linguaggio interpretato. Per quanto riguarda il motivo $, questa è probabilmente in gran parte tradizione - uno dei creatori di un linguaggio antico che usa il costrutto (Bash? O più probabilmente un predecessore ad esso) lo usò per qualsiasi motivo e le lingue successive lo adottarono.


1
Potrebbe non rendere il lexer e il parser molto più facili da scrivere, ma elimina il requisito per le parole riservate.
TomG,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.