Komut satırı argümanlarını 'argv' olarak adlandırma kuralı nereden geldi?


18

Python , PHP ve Ruby gibi görünüyor hepsi komut satırı argümanları listesine başvurmak için "argv" adını kullanıyor . "Argv" ismi nereden geliyor? Neden "args" gibi bir şey olmasın?

Benim tahminim v'nin "vektör" anlamına geleceği C'den geliyor. Wikipedia'da şöyle bir dipnot var:

bu değişkenin adındaki vektör terimi geleneksel anlamda dizelere atıfta bulunmak için kullanılır.

Ancak, bu bilgi için kaynak yoktur. Gerçekten, daha da geriye giden kökleri olup olmadığını merak ediyorum. C kullandı, çünkü ondan önce bir şey kullandı mı?


2
ve ben her zaman "v" "değerler" için durdum
warren

Yanıtlar:


25

Diğer cevaplar argv C'den gelirken, C bir diziyi "vektör" olarak adlandırma fikrini nereden aldı?

Doğrudan BCPL'den geldi . argv(Dize) argümanlarının vektörünü ifade etse de, BCPL'nin vektörlerde saklanan dizeleri vardı, ancak dizgi değişmezleriydi ve Pascal dizeleri gibi çalıştılar. Vektör iki öğeye sahipti: üzerindeki uzunluk literal!0ve üzerindeki karakterler literal!1. Göre Clive Tüy , dizeleri dizeleri bunları "repacking" o zaman diziyi dönüştürerek, karakter diziler içine "açma" tarafından manipüle edildi: dizeleri C ile karşılaştırın olan karakter dizileri.

Evet, C vektör için v'yi kullandı çünkü daha önce başka bir şey yapmıştı. Şimdi, BCPL'den önce bir şey vektörü bu şekilde kullandı mı? BCPL bir basitleştirme kendisinin "Cambridge [veya Kombine] Dil programlama": kullanılan bu vectorbir 1-boyutlu dizi ile eş anlamlı olarak ve matrix2-boyutlu bir dizi ile eş anlamlı olarak. Bu, vektörlerin ve matrislerin matematiğindeki gösterimle tutarlıdır , ancak CPL'de sadece kullanışlı anımsatıcılardır ve matematiksel yapılarla ilişkili özelliklerden hiçbirine sahip değildir.

Bilgi işlem dilleri konusunda zaman içinde daha ileriye gidebilir miyiz? İzimizin potansiyel bir dalı soğuyor. CPL, Algol 60'tan (1963 güncellemesi) büyük ölçüde etkilenmiştir. Şimdi ALGOL 68, "paketlenmiş vektörler" olarak tanımlanan tiplere sahipti bitsve bytesbunlar gibi : ama bunlar Algol'un daha önceki sürümlerinde değildi.ARRAY diziye atıfta . BCPL 1966'dan geldiğinden, CPL bundan önce olmalıydı (ancak 1963'ten sonra): ALGOL 68 (1968 ve 1973'te standardize edildi) doğrudan bir etki olamaz.

Öte yandan, CPL'nin Temel Özellikleri McCarthy'nin LISP sistemine de atıfta bulunmaktadır . Bu , sistemdeki bir veri yapısına atıfta bulunmak için vektörü kullanmasa da , S-ifadeleri , M-ifadeleri ve L-ifadeleri (L-ifadeleri dizgidir, bu nedenle vektör ve dize arasındaki herhangi bir ilişki ortadan kalkmıştır), " vektörü, herhangi bir zamanda makinenin durumunu" temsil eden "bir dizi değişkenin değerlerini" temsil etmek için başka bir anlamda vektörü kullanır. Dolayısıyla, yorumlarda yapılan bir varsayım için kanıtımız var: hesaplamada 'dizi' anlamına gelen 'vektör' kelimesinin kullanılmasının matematikte benzer terimin uygulanmasından kaynaklanmaktadır.


1
B'de de mevcuttu ve C & BCPL arasında olduğu gibi geliyordu.
Robbie Dee

5
Ve BCPL bunu nereden buldu? Bir "vektörün" tek boyutlu bir değer listesi olduğu matematikten.
Caleb

2
Bir karakter dizisini vektör olarak temsil etmek BCPL'den çok daha eskidir (örneğin, hesaplama teorisi hakkındaki herhangi bir eski kitaba bakınız) . Aslında, konsept muhtemelen "string" (karakter dizisi olarak) kelimesinin kendisinden daha eski ..
BlueRaja - Danny Pflughoeft

1
@Caleb doğru. BCPL (~ 1967) ve APL (~ 1960) zamanında, çoğu programcı Matematik bölümlerinde eğitim gördü. O günlerde, neredeyse hiç lisans CS programı yoktu.
Ross Patterson

2
@RossPatterson CPL, 1953'ten beri (dönüşüm kursu da olsa) bilgisayar bilimleri diplomasına sahip Cambridge'den geliyor. 1960'lı yıllarda CS mezunlarından kısa olmayan birkaç yerden biri olması muhtemeldi.

12

argvmain()fonksiyonun argvprograma bir argüman vektörünü temsil eden bir parametre aldığı C'den gelir . Ayrıca Unix'ten geldiğini söyleyebilirsiniz, bu da C'de çoğu Unix gelişiminin gerçekleştiği gibi C'den geldiğini söylemekle aynıdır ve Unix ve C'nin uzun bir paylaşılan geçmişi vardır.


1
Her zaman düşünce argv "argüman değerleri" anlamına gelir yeni bir şey öğrendim sevindim :)
Honza Brabec

2
Sağ ve argc(bağımsız değişken sayısı) öğedeki öğe sayısıdır argv, çünkü C'de dizilerin sabit boyutları yoktur.
Ross Patterson

9

C'de main()fonksiyon iki parametre alabilir: argc"argüman sayısı" ve argv"argüman vektörü" anlamına gelir. C'de vektörler gibi süslü nesneleriniz yok, bu yüzden öğe sayısını olarak iletmeniz gerekiyor argc. Buna karşılık, bahsettiğiniz dillerin kendi boyutlarını bilen vektörler veya listeler gibi şeyler vardır, bu yüzden argcgerekli değildir. Ama isim argvtakıldı.

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.