Dlaczego $ w nazwach identyfikatorów dla tak wielu języków?


15

Wiele języków skryptowych, takich jak Perl, Awk, Bash, PHP itp., Używa znaku $ przed nazwami identyfikatorów. Próbowałem sprawdzić, dlaczego, ale nigdy nie miałem zadowalającej odpowiedzi.


10
Być może ze względu na ostatni krok w biznesplanach większości programistów - ... zysk!
Oded

2
Interesujący post na temat SO dotyczący tego samego pytania: Dlaczego zmienne Perla muszą zaczynać się od $,%, @ (sigils)
Brad Christie

Odpowiedzi:


4

Powłoka Bourne'a lub jej poprzedniczka była prawdopodobnie początkiem konwencji. Powłoki zwykle używają $fooodniesienia do zmiennej powłoki lub zmiennej środowiskowej, podczas gdy po prostu foojest traktowany jako ciąg literalny (który może być nazwą polecenia, nazwą pliku lub po prostu słowem, które należy przekazać do innego polecenia).

Prawdopodobnie jest to kwestia zminimalizowania ilości wpisywanego tekstu. W większości języków programowania większość wpisywanych słów kluczowych to słowa kluczowe (z małego stałego zestawu) i nazwy rzeczy, które zostały zadeklarowane; warto używać tylko nazwy dla nich. Literały łańcuchowe są ujęte w cudzysłowy (pojedyncze lub podwójne), aby je odróżnić składniowo.

W interaktywnej powłoce większość rzeczy, które wpisujesz, to nazwy poleceń i nazwy plików, więc posiadanie dla nich nieokreślonej formy ma sens. Nazwy zmiennych nie są używane tak często, więc ich poprzedzenie $jest prostym sposobem ich rozróżnienia.

$Prawdopodobnie inspiracją było także śledzenie , którego używają niektóre języki BASIC dla zmiennych łańcuchowych (w przeciwieństwie do zmiennych numerycznych).

Wybór Perla do zastosowania $w zmiennych skalarnych był niewątpliwie zainspirowany powłokami, takimi jak powłoka Bourne'a, a wczesne wersje Perla powszechnie traktowały słowa kluczowe jako literały łańcuchowe ( print FOOi print "FOO"były równoważne). To użycie słów kluczowych było przestarzałe w bardziej współczesnych wersjach Perla, ale sigile pozostają i są najczęściej używane do rozróżniania różnych rodzajów zmiennych. Być może, gdyby Perl był projektowany od zera, zmienne skalarne mogłyby być oznaczone „pustym znakiem”, ale tak się nie stało.

(BTW, Awk nie używa pieczęci. Ma $składnię, ale odnosi się do liczb pól. NFJest liczbą pól; $NFjest ostatnim ( NFth)).



14

Znak $ w nazwie zmiennej jest szczególnym przypadkiem „Sigil” , w początkowych czasach BASIC (około 1964 r.) $ Był używany do oznaczania nazw zmiennych łańcuchowych. Domyślam się, ponieważ ułatwia kompilatorom oddzielanie nazw zmiennych od reszty gramatyki za pomocą jakiegoś symbolu, a ponieważ było wspólne dla BASIC, jego użycie postępowało. Nie jest to jednak jedyny zastosowany.


2
$Ciągów znaków (i %na całkowite) w podstawowego sufiks zamiast przedrostek, co najmniej w (brak wzorca) wariantów ja zadane. Nie jest to oczywiście istotne - sufiks vs. prefiks jest dość powierzchowny, przynajmniej jeśli chodzi o kompilatory i analizy leksykalne. Może występować niewielka różnica w zakresie czytelności.
Steve314,

BTW - jednym z powodów, dla których działał w Basicu jest to, że istniał bardzo ograniczony zakres typów i nie zdefiniowano typów zdefiniowanych przez użytkownika, więc potrzebny był tylko bardzo ograniczony zakres sigili. Wykorzystanie Perla jest inne - choć dla mnie minęło już dużo czasu, więc tak naprawdę nie pamiętam szczegółów.
Steve314,

@ steve314, masz absolutną rację A $ = ... Dziękujemy za zwrócenie uwagi na to.
NoChance,

5

awk?

Czasami nazywany sigil , zwykle używany do tłumaczenia nazw zmiennych (i innych) na wartości.


5

Wydaje się, że pochodzi on z języka BASIC, gdzie sufiks $ wskazuje zmienną łańcuchową, a także został wymawiany jako „string”. Na przykład INKEY $ jest wymawiane „w kluczu”.

Ale dlaczego znak dolara? Cóż, $ wygląda trochę jak S dla stringów. I według Wikipedii :

Ponieważ znak dolara jest jednym z niewielu symboli, który z jednej strony jest prawie powszechnie obecny w komputerowych zestawach znaków, ale z drugiej strony rzadko jest potrzebny w ich dosłownym znaczeniu w oprogramowaniu komputerowym, znak $ był używany na komputerach do wielu celów niezwiązanych z pieniędzmi.

(Odpowiednio, za kilka dolarów więcej jest w telewizji podczas pisania tego.)


2

Dlaczego nie? Łatwiej jest napisać leksykę, która może powiedzieć, że identyfikator będzie zmienną (a w konsekwencji łatwiej napisać analizator składni), szczególnie dla języka interpretowanego. Co do tego $, prawdopodobnie jest to w dużej mierze tradycja - jeden z twórców wczesnego języka używającego konstruktów (Bash? Lub raczej jego poprzednik) używał go z jakiegokolwiek powodu, a kolejne języki go przyjmowały.


1
Może nie ułatwiać pisania leksemu i analizatora składni, ale eliminuje konieczność stosowania słów zastrzeżonych.
TomG
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.