$ Neden bu kadar çok dil için tanımlayıcı adında?


15

Perl, Awk, Bash, PHP, vb. Gibi birçok komut dosyası dili, tanımlayıcı adlarından önce bir $ işareti kullanır. Nedenini aramaya çalıştım ama hiçbir zaman tatmin edici bir cevap bulamadım.


10
Muhtemelen çoğu programcının iş planlarındaki son adımdan dolayı - ... kar!
Oded

Yanıtlar:


4

Bourne kabuğu veya selefi muhtemelen sözleşmenin kaynağıydı. Kabuklar $fookabuk değişkenine veya ortam değişkenine atıfta bulunma eğilimindedir , ancak yalnızca foodeğişmez bir dize (bir komut adı, bir dosya adı veya yalnızca başka bir komuta iletilecek bir kelime olabilir) olarak alınır.

Muhtemelen ne kadar yazmanız gerektiğini en aza indirme meselesidir. Çoğu programlama dilinde, yazdıklarınızın çoğu anahtar kelimeler (küçük bir sabit kümeden) ve bildirilen şeylerin adları olacaktır; onlar için sadece bir isim kullanmak mantıklı. Dize değişmezleri sözdizimsel olarak ayırt etmek için tırnak işaretleri (tek veya çift) içine alınır.

Etkileşimli bir kabukta, yazdığınız şeylerin çoğu komut adları ve dosya adları olacaktır, bu nedenle onlar için dekore edilmemiş bir forma sahip olmak mantıklıdır. Değişken isimleri çok sık kullanılmaz, bu nedenle onlardan önce onları $ayırt etmenin basit bir yoludur.

$Bazı BASIC'lerin dize değişkenleri (sayısal değişkenlerin aksine) için kullandığı iz muhtemelen bir ilham kaynağı olmuştur.

Perl'in $skaler değişkenler için kullanma tercihi , hiç şüphesiz Bourne kabuğu gibi kabuklardan ve Perl'in erken versiyonlarında yaygın olarak dize değişmezleri olarak işlem görmüştür ( print FOOve print "FOO"eşdeğerdir). Barewordların bu kullanımı Perl'in daha modern versiyonlarında kullanımdan kaldırılmıştır, ancak işaretler kalır ve çoğunlukla farklı türde değişkenleri ayırt etmek için kullanılır . Belki de Perl sıfırdan tasarlanıyorsa, skaler değişkenler "boş bir sigil" ile gösterilebilir, ancak bu olmadı.

(BTW, Awk sigils kullanmaz. Bir $sözdizimi vardır, ancak alan sayılarına işaret eder. Alan NFsayısıdır; $NFson ( NFth) alanıdır.)


3
Sadece bir sidenote: Bourne kabuğu (1977) , BASIC (1964) .
Steven Jeuris

14

Değişken adındaki $ işareti özel bir "Sigil" örneğidir. Dize değişkeni adlarını belirtmek için BASIC (1964 ya da öylesine) 'in ilk günlerinde $ kullanılmıştır. Benim tahminim, derleyicilerin değişken isimlerini dilbilgisinin geri kalanından bir sembol kullanarak ayırmasını kolaylaştırdığı ve BASIC için yaygın olduğu için kullanımı ilerledi. Ancak, bu sadece kullanılan değil.


2
$Dizeleri (ve %tamsayılar için) Basic'te eki yerine bir önek, (standart dışı) içinde en azından ben verdirdiler edildi varyantları oldu. Tabii ki bu önemli değil - sonek ve önek oldukça yüzeysel, en azından derleyiciler ve sözlük analizi söz konusu olduğunda. Okunabilirlik açısından küçük bir fark olabilir.
Steve314

BTW - Basic'te çalışmasının bir nedeni, çok sınırlı bir tür aralığının ve kullanıcı tanımlı türlerin olmamasıdır, bu nedenle sadece çok sınırlı bir dizi işarete ihtiyaç duyulmuştur. Perl kullanımı farklı - benim için uzun zaman geçti, bu yüzden detayları gerçekten hatırlayamıyorum.
Steve314

@ steve314, kesinlikle haklısın A $ = ... Bunu not ettiğiniz için teşekkürler.
NoChance

5

awk?

Bazen sigil olarak adlandırılır , genellikle değişkenlerin (ve diğerlerinin) adlarını değerlere çevirmek için kullanılır.


5

Bu, $ sonekinin bir dize değişkenini gösterdiği ve aynı zamanda "dize" olarak telaffuz edildiği BASIC'ten kaynaklanıyor gibi görünüyor. Örneğin, INKEY $ "anahtar dizgide" telaffuz edilir.

Ama neden dolar işareti? $, String için S'ye biraz benziyor. Ve Wikipedia'ya göre :

Dolar işareti, bir yandan neredeyse evrensel olarak bilgisayar karakter kümelerinde bulunan birkaç simgeden biri olduğu için, diğer yandan, bilgisayar yazılımı içindeki gerçek anlamlarında nadiren ihtiyaç duyulduğu için, $ karakteri bilgisayarlarda kullanıldı parayla ilgisi olmayan birçok amaç için.

(Uygun olarak, bunu yazarken birkaç Dolar için daha fazla televizyonda.)


2

Neden olmasın? Özellikle yorumlanmış bir dil için, bir tanımlayıcının değişken olacağını (ve dolayısıyla ayrıştırıcıyı yazmanın daha kolay olacağını) söyleyen bir lexer yazmak daha kolaydır. Neden olarak $, bu büyük olasılıkla büyük bir gelenek - yapıyı kullanan erken bir dilin yaratıcılarından biri (Bash? Veya daha büyük olasılıkla bir öncül) onu hangi nedenle ve onu takip eden diller için kullansaydı kullandı.


1
Lexer ve ayrıştırıcıyı yazmayı çok daha kolay hale getirmeyebilir, ancak ayrılmış sözcüklere olan gereksinimi ortadan kaldırır.
TomG
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.