Perché $ in nomi di identificatori per così tante lingue?

15

Molti linguaggi di scripting come Perl, Awk, Bash, PHP, ecc. usano un segno $ prima dei nomi degli identificatori. Ho cercato di cercare il motivo, ma non ho mai avuto una risposta soddisfacente.

    
posta rdasxy 04.11.2011 - 21:20
fonte

5 risposte

4

La shell Bourne o il suo predecessore era probabilmente l'origine della convenzione. I gusci tendono ad usare $foo per riferirsi a una variabile di shell o ad una variabile d'ambiente, mentre solo foo è preso come una stringa letterale (che potrebbe essere un nome di comando, un nome di file o solo una parola da passare ad un altro comando ).

Probabilmente si tratta di ridurre al minimo quanto devi digitare. 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 valori letterali delle stringhe 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 un modulo non decorato per loro ha senso. I nomi delle variabili non vengono usati abbastanza spesso, quindi precederli con $ è un modo semplice per distinguerli.

Il trailing $ che alcuni BASIC usano per le variabili stringa (al contrario delle variabili numeriche) è stato probabilmente anche un'ispirazione.

La scelta di Perl di usare $ per le variabili scalari è stata indubbiamente ispirata da shell come la shell Bourne, e le prime versioni di Perl comunemente trattate bareword come stringhe letterali ( print FOO e print "FOO" erano equivalenti). Questo uso di barewords è stato deprecato in versioni più moderne di Perl, ma i sigilli rimangono e sono principalmente usati per distinguere diversi tipi di variabili. Forse se Perl fosse stato progettato da zero, le variabili scalari potrebbero essere denotate da un "sigillo vuoto", ma ciò non è accaduto.

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

    
risposta data 04.11.2011 - 22:29
fonte
14

Un nome di variabile con segno $ è un caso speciale di "Sigil" , Ai primi tempi di BASIC (1964 circa) $ era usato per denotare i nomi delle variabili stringa. La mia ipotesi è, dal momento che rende più facile per i compilatori separare i nomi delle variabili dal resto della grammatica usando un simbolo, e poiché era comune a BASIC, il suo utilizzo è progredito. Tuttavia, questo non è l'unico utilizzato.

    
risposta data 04.11.2011 - 21:49
fonte
5

awk?

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

    
risposta data 04.11.2011 - 21:32
fonte
5

Sembra che abbia origine in BASIC, dove il suffisso $ indica una variabile stringa ed è stato pronunciato anche come "stringa". Ad esempio, INKEY $ viene pronunciato "nella stringa di chiavi".

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

As the dollar sign is one of the few symbols that is, on one hand, almost universally present in computer character sets, but, on the other hand, rarely needed in their literal meaning within computer software, the $ character has been used on computers for many purposes unrelated to money.

(Appropriamente, Per pochi dollari in più è in televisione mentre scrivo questo.)

    
risposta data 05.11.2011 - 21:15
fonte
2

Perché no? È più facile scrivere un lexer che possa dire che un identificatore diventerà una variabile (e di conseguenza più semplice scrivere il parser), specialmente per un linguaggio interpretato. Per quanto riguarda il motivo per cui $ , probabilmente è in gran parte tradizione - uno dei creatori di una lingua antica che utilizzava il costrutto (Bash? O più probabilmente un predecessore) lo ha usato per qualsiasi motivo e le lingue successive lo hanno adottato.

    
risposta data 04.11.2011 - 21:31
fonte

Leggi altre domande sui tag