Trường hợp quy ước đặt tên đối số dòng lệnh là 'argv' đến từ đâu?


18

Có vẻ như Python , PHPRuby đều sử dụng tên "argv" để chỉ danh sách các đối số dòng lệnh. Cái tên "argv" đến từ đâu? Tại sao không phải là một cái gì đó như "args"?

Tôi đoán là nó đến từ C, trong đó v sẽ là "vectơ". Wikipedia có chú thích :

thuật ngữ vectơ trong tên của biến này được sử dụng theo nghĩa truyền thống để chỉ các chuỗi.

Tuy nhiên, không có bất kỳ nguồn nào cho thông tin này. Thực sự, tôi tò mò nếu nó có nguồn gốc thậm chí xa hơn trở lại. Có phải C đã sử dụng nó bởi vì cái gì đó trước đó đã sử dụng nó?


2
và tôi luôn luôn là "v" là viết tắt của "giá trị"
warren

Câu trả lời:


25

Trong khi các câu trả lời khác lưu ý argvđến từ C, thì C đã lấy ý tưởng ở đâu để gọi một mảng là "vectơ"?

Trực tiếp, nó đến từ BCPL . Mặc dù argvđề cập đến vectơ của các đối số (chuỗi), BCPL đã có các chuỗi được lưu trữ trong các vectơ, nhưng chúng là các chuỗi ký tự và chúng hoạt động giống như các chuỗi Pascal. Vectơ có hai yếu tố: chiều dài literal!0và ký tự tại literal!1. Theo Clive Feather , các chuỗi được xử lý bằng cách "giải nén" chúng thành các mảng ký tự, biến đổi mảng sau đó "đóng gói lại" chúng thành các chuỗi: so sánh điều này với C trong đó các chuỗi các mảng ký tự.

Vì vậy, có, C đã sử dụng v cho vector bởi vì một cái gì đó khác đã làm như vậy trước đây. Bây giờ, có điều gì trước khi BCPL sử dụng vector theo cách này không? BCPL tự nó là một sự đơn giản hóa của "Ngôn ngữ lập trình Cambridge [hoặc kết hợp]": từ này được sử dụng vectornhư một từ đồng nghĩa cho mảng 1 chiềumatrixlà từ đồng nghĩa cho mảng 2 chiều. Điều này phù hợp với ký hiệu trong toán học của vectơ và ma trận, mặc dù trong CPL chúng chỉ là những câu thần chú tiện dụng và không có bất kỳ tính chất nào liên quan đến cấu trúc toán học.

Chúng ta có thể đẩy lùi thời gian xa hơn về ngôn ngữ điện toán không? Một nhánh tiềm năng của đường mòn của chúng tôi chạy lạnh. CPL bị ảnh hưởng nặng nề bởi Algol 60 (bản cập nhật năm 1963). Bây giờ ALGOL 68 đã có các loại được mô tả là "vectơ đóng gói", chẳng hạn như bitsbytes: nhưng chúng không có trong các bản phát hành trước đó của Algol mà chỉ ARRAYđề cập đến mảng. Vì BCPL xuất hiện từ năm 1966, CPL phải có trước đó (nhưng sau năm 1963): ALGOL 68 (được chuẩn hóa vào năm 1968 và 1973) không thể có ảnh hưởng trực tiếp.

Mặt khác, các tính năng chính của CPL cũng liên quan đến hệ thống LISP của McCarth . Trong khi điều này không sử dụng vector để chỉ một cấu trúc dữ liệu trong hệ thống chính nó, những con người S-biểu , M-biểuL-biểu thức (L-biểu là chuỗi, vì vậy bất kỳ mối liên hệ giữa vector và chuỗi đã biến mất), nó không sử dụng vectơ theo nghĩa khác để biểu thị "giá trị của một số biến" đại diện cho "trạng thái của máy bất cứ lúc nào". Vì vậy, chúng tôi có bằng chứng cho một giả định được đưa ra trong các ý kiến: việc sử dụng từ 'vectơ' để có nghĩa là 'mảng' trong điện toán xuất phát từ việc áp dụng thuật ngữ tương tự trong toán học.


1
Nó cũng có mặt ở B, giống như đã làm giữa C & BCPL.
Robbie Dee

5
Và BCPL đã lấy nó ở đâu? Từ toán học, trong đó "vectơ" là danh sách các giá trị một chiều.
Caleb

2
Đại diện cho một chuỗi các ký tự như một vectơ cũ hơn BCPL (xem, ví dụ, bất kỳ cuốn sách cũ nào về lý thuyết tính toán) . Trên thực tế, khái niệm này có lẽ cũ hơn từ "chuỗi" (như một chuỗi các ký tự) ..
BlueRaja - Danny Pflughoeft

1
@Caleb là chính xác. Vào thời điểm BCPL (~ 1967) và APL (~ 1960), hầu hết các lập trình viên đều được đào tạo trong các khoa Toán học. Trong những ngày đó, hầu như không có chương trình CS đại học.
Ross Patterson

2
@RossPatterson CPL đến từ Cambridge, nơi có bằng khoa học máy tính từ năm 1953 (mặc dù là một khóa học chuyển đổi). Nó có khả năng là một trong số ít nơi không thiếu sinh viên tốt nghiệp CS vào những năm 1960.

12

argvxuất phát từ C, trong đó main()hàm lấy argvtham số đại diện cho vectơ đối số cho chương trình. Bạn cũng có thể nói rằng nó đến từ Unix, gần giống như nói rằng nó đến từ C vì hầu hết sự phát triển Unix đã xảy ra trong C, và Unix và C có một lịch sử chia sẻ lâu dài.


1
Luôn nghĩ argv có nghĩa là "giá trị đối số" rất vui vì tôi đã học được điều gì đó mới :)
Honza Brabec

2
Phải và argc(số lượng đối số) là số lượng mục trong argv, vì trong C, mảng không có kích thước cố định.
Ross Patterson

9

Trong C, main()hàm có thể có hai tham số: argcviết tắt của "số lượng đối số" và argv, viết tắt của "vectơ đối số". Trong C, bạn không có các đối tượng ưa thích như vectơ, đó là lý do tại sao bạn phải vượt qua số lượng vật phẩm như argc. Ngược lại, các ngôn ngữ bạn đã đề cập có những thứ như vectơ hoặc danh sách biết kích thước của chúng, vì vậy argckhông cần thiết. Nhưng tên argvbị kẹt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.