¿Por qué $ en nombres de identificadores para tantos idiomas?

15

Muchos lenguajes de script como Perl, Awk, Bash, PHP, etc. usan un signo $ antes de los nombres de los identificadores. Traté de buscar por qué pero nunca tuve una respuesta satisfactoria.

rdasxy
fuente
10
Posiblemente debido al último paso en los planes de negocios de la mayoría de los programadores ... ¡ganancias!
Oded
2
Publicación interesante en SO con respecto a la misma pregunta: ¿Por qué las variables de Perl deben comenzar con $,%, @ (sigilos)
Brad Christie

Respuestas:

4

El shell Bourne o su predecesor fue probablemente el origen de la convención. Los shells tienden a usarse $foopara referirse a una variable de shell o variable de entorno, mientras que solo foose toma como una cadena literal (que podría ser un nombre de comando, un nombre de archivo o simplemente una palabra para pasar a otro comando).

Probablemente sea una cuestión de minimizar cuánto tienes que escribir. En la mayoría de los lenguajes de programación, la mayoría de lo que escriba serán palabras clave (de un pequeño conjunto fijo) y nombres de cosas que han sido declaradas; tiene sentido usar solo un nombre para esos. Los literales de cadena están encerrados entre comillas (simples o dobles) para distinguirlos sintácticamente.

En un shell interactivo, la mayoría de las cosas que escriba serán nombres de comandos y nombres de archivos, por lo que tiene sentido tener una forma no decorada. Los nombres de variables no se usan con tanta frecuencia, por lo que precederlos con $es una forma sencilla de distinguirlos.

El seguimiento $que algunos BASIC usan para las variables de cadena (en oposición a las variables numéricas) probablemente fue también una inspiración.

La elección de Perl para usar $para variables escalares se inspiró indudablemente en shells como el shell Bourne, y las primeras versiones de Perl comúnmente trataban las palabras vacías como literales de cadena ( print FOOy print "FOO"eran equivalentes). Este uso de palabras vacías ha quedado en desuso en versiones más modernas de Perl, pero los sigilos permanecen y se utilizan principalmente para distinguir diferentes tipos de variables. Quizás si Perl fuera diseñado desde cero, las variables escalares podrían denotarse con un "sigilo vacío", pero eso no sucedió.

(Por cierto, Awk no usa sigilos. Tiene una $sintaxis, pero se refiere a números de campo. NFEs el número de campos; $NFes el último (el NFcampo)).

Keith Thompson
fuente
3
Solo una nota al margen: Bourne shell (1977) , BASIC (1964) .
Steven Jeuris el
14

Un signo de $ en el nombre de la variable es un caso especial de "Sigil" . En los primeros días de BASIC (más o menos en 1964) se usaba $ para denotar nombres de variables de cadena. Supongo que, dado que facilita a los compiladores separar nombres de variables del resto de la gramática usando algún símbolo, y dado que era común a BASIC, su uso ha progresado. Sin embargo, este no es el único utilizado.

Ninguna posibilidad
fuente
2
Las $cadenas for (y %for integers) en Basic eran un sufijo en lugar de un prefijo, al menos en las variantes (no estándar) que me infligían. No es que eso sea significativo, por supuesto: el sufijo frente al prefijo es bastante superficial, al menos en lo que respecta a los compiladores y el análisis léxico. Puede haber una ligera diferencia en términos de legibilidad.
Steve314
Por cierto, una razón por la que funcionó en Basic es que había un rango muy limitado de tipos y no tipos definidos por el usuario, por lo que solo se necesitaba un rango muy limitado de sigilos. El uso de Perl es diferente, aunque ha pasado mucho tiempo para mí, por lo que realmente no puedo recordar los detalles.
Steve314
@ steve314, tienes toda la razón A $ = ... Gracias por notar esto.
NoChance
5

awk?

A veces se llama sigilo , generalmente se usa para traducir los nombres de variables (y otras) en valores.

Jé Queue
fuente
5

Esto parece originarse en BASIC, donde el sufijo $ indica una variable de cadena y también se pronunció como "cadena". Por ejemplo, INKEY $ se pronuncia "en cadena clave".

¿Pero por qué el signo de dólar? Bueno, $ se parece un poco a S para string. Y según Wikipedia :

Como el signo de dólar es uno de los pocos símbolos que, por un lado, está casi universalmente presente en los conjuntos de caracteres de la computadora, pero, por otro lado, rara vez se necesita en su significado literal dentro del software, el carácter $ se ha utilizado en las computadoras para muchos fines no relacionados con el dinero.

(Apropiadamente, por unos pocos dólares más está en la televisión mientras escribo esto).

Hugo
fuente
2

Por qué no? Es más fácil escribir un lexer que pueda indicar que un identificador será una variable (y, en consecuencia, más fácil de escribir el analizador sintáctico), especialmente para un lenguaje interpretado. En cuanto a por qué $, es probable que sea en gran parte una tradición: uno de los creadores de un lenguaje temprano que usaba el constructo (¿Bash?

Kevin
fuente
1
Es posible que el lexer y el analizador no sean mucho más fáciles de escribir, pero elimina el requisito de palabras reservadas.
TomG