Dari mana konvensi penamaan argumen baris perintah sebagai 'argv' berasal?

18

Sepertinya Python , PHP , dan Ruby semuanya menggunakan nama "argv" untuk merujuk ke daftar argumen baris perintah. Dari mana nama "argv" berasal? Kenapa bukan sesuatu seperti "args"?

Dugaan saya adalah bahwa itu berasal dari C, di mana v akan berarti "vektor". Wikipedia memiliki catatan kaki yang mengatakan:

istilah vektor dalam nama variabel ini digunakan dalam arti tradisional untuk merujuk ke string.

Namun, tidak ada sumber untuk info ini. Sungguh, saya ingin tahu apakah ia memiliki akar yang bahkan lebih jauh ke belakang. Apakah C menggunakannya karena sesuatu sebelum itu menggunakannya?

Mark Hildreth
sumber
2
dan saya selalu "v" berdiri untuk "nilai"
warren

Jawaban:

25

Sementara jawaban lain perhatikan yang argvberasal dari C, dari mana C mendapatkan ide untuk memanggil array sebagai "vektor"?

Secara langsung, itu berasal dari BCPL . Meskipun argvmengacu pada vektor argumen (string), BCPL memang memiliki string yang disimpan dalam vektor, tetapi mereka string literal dan mereka bekerja seperti string Pascal. Vektor memiliki dua elemen: panjang di literal!0dan karakter di literal!1. Menurut Clive Feather , string dimanipulasi dengan "membongkar" mereka ke dalam array karakter, mengubah array kemudian "mengemas kembali" mereka menjadi string: bandingkan dengan C di mana string adalah array karakter.

Jadi ya, C menggunakan v untuk vektor karena sesuatu yang lain telah dilakukan sebelumnya. Sekarang, apakah sebelum BCPL menggunakan vektor dengan cara ini? BCPL sendiri merupakan penyederhanaan dari "Bahasa Pemrograman Cambridge [atau Gabungan]": ini digunakan vectorsebagai sinonim untuk array 1 dimensi dan matrixsebagai sinonim untuk array 2 dimensi. Ini konsisten dengan notasi dalam matematika vektor dan matriks, meskipun dalam CPL mereka hanya mnemonik berguna dan tidak memiliki sifat yang terkait dengan struktur matematika.

Bisakah kita mendorong kembali lebih jauh dalam waktu terkait bahasa komputasi? Salah satu cabang potensial dari jejak kami menjadi dingin. CPL sangat dipengaruhi oleh Algol 60 (pembaruan 1963). Sekarang ALGOL 68 memiliki tipe yang digambarkan sebagai "vektor yang dikemas", seperti bitsdan bytes: tetapi ini bukan dalam rilis Algol sebelumnya yang hanya ARRAYmerujuk pada array. Karena BCPL berasal dari tahun 1966, CPL pasti sebelum itu (tetapi setelah 1963): ALGOL 68 (standar pada tahun 1968 dan 1973) tidak mungkin menjadi pengaruh langsung.

Di sisi lain, Fitur Utama CPL juga membuat referensi ke sistem LISP McCarthy . Meskipun ini tidak menggunakan vektor untuk merujuk pada struktur data dalam sistem itu sendiri, itu adalah ekspresi-S , ekspresi-M dan ekspresi - L (ekspresi-L adalah string, sehingga setiap hubungan antara vektor dan string telah menghilang), itu tidak menggunakan vektor dalam arti lain untuk mewakili "nilai sejumlah variabel" yang mewakili "keadaan mesin kapan saja". Jadi kami memiliki bukti untuk asumsi yang dibuat dalam komentar: bahwa penggunaan kata 'vektor' berarti 'array' dalam komputasi berasal dari penerapan istilah yang sama dalam matematika.


sumber
1
Itu juga hadir di B, datang seperti yang terjadi antara C & BCPL.
Robbie Dee
5
Dan dari mana BCPL mendapatkannya? Dari matematika, di mana "vektor" adalah daftar nilai satu dimensi.
Caleb
2
Merepresentasikan string karakter sebagai vektor jauh lebih tua dari BCPL (lihat, misalnya, buku tua mana pun tentang teori perhitungan) . Bahkan, konsepnya mungkin lebih tua dari kata "string" (sebagai urutan karakter) itu sendiri ..
BlueRaja - Danny Pflughoeft
1
@ Caleb benar. Pada saat BCPL (~ 1967) dan APL (~ 1960), sebagian besar programer dididik di departemen Matematika. Pada masa itu, hampir tidak ada program CS sarjana.
Ross Patterson
2
@RossPatterson CPL berasal dari Cambridge, yang memiliki gelar ilmu komputer sejak 1953 (meskipun sebagai kursus konversi). Itu mungkin menjadi salah satu dari sedikit tempat yang tidak kekurangan lulusan CS pada 1960-an.
12

argvberasal dari C, di mana main()fungsi mengambil argvparameter yang mewakili vektor argumen ke program. Anda juga bisa mengatakan bahwa itu berasal dari Unix, yang hampir sama dengan mengatakan bahwa itu berasal dari C karena kebanyakan pengembangan Unix terjadi di C, dan Unix dan C memiliki sejarah panjang yang dibagikan.

Caleb
sumber
1
Argumen selalu berarti "nilai argumen" senang saya belajar sesuatu yang baru :)
Honza Brabec
2
Kanan dan argc(jumlah argumen) adalah jumlah item dalam argv, karena dalam C, array tidak memiliki dimensi yang tetap.
Ross Patterson
9

Dalam C main()fungsi dapat mengambil dua parameter argc:, yang merupakan singkatan dari "count argumen", dan argv, yang merupakan singkatan dari "vector argumen". Dalam C Anda tidak memiliki objek mewah seperti vektor, itulah sebabnya Anda harus memasukkan jumlah item sebagai argc. Sebaliknya, bahasa yang Anda sebutkan memiliki hal-hal seperti vektor atau daftar yang mengetahui ukurannya sendiri, jadi argctidak diperlukan. Tapi namanya argvmacet.

Dima
sumber