Từ nguyên của chuỗi String


58

Vì vậy, rõ ràng là một chuỗi các sự vật là một chuỗi các sự vật, và do đó là một chuỗi các ký tự / byte / vv. cũng có thể được gọi là một chuỗi. Nhưng ai là người đầu tiên gọi chúng là chuỗi? Và khi? Và trong bối cảnh nào mà nó bị mắc kẹt xung quanh? Tôi đã luôn tự hỏi về điều này.


10
đã được hỏi về stackoverflow
Alb

1
@Mark xin lỗi, đã không nhận ra đó là quy ước. Có ý nghĩa.
Alb

1
@Alb không có vấn đề gì. Đối với tài liệu tham khảo của bạn và người khác (câu hỏi này được gắn cờ là trùng lặp), một câu hỏi tồn tại trên Stack Overflow không ảnh hưởng đến trạng thái của câu hỏi này, nhưng chắc chắn rất hữu ích khi bình luận và ghi chú các câu hỏi khác trên mạng Điều đó có thể giúp trả lời nó.

1
Alb, với câu trả lời tuyệt vời của user4051, tôi khuyên bạn nên xóa nhận xét của bạn tham khảo câu hỏi stackoverflow và đặt một liên kết ở đó cho câu hỏi này.
Tyler Collier

1
Xin lưu ý rằng trong khi tôi bỏ phiếu đóng, tôi nghĩ chúng ta nên giữ câu hỏi này như một biển chỉ dẫn. Các câu trả lời cho câu hỏi này kỹ lưỡng và đầy đủ hơn nhiều so với câu trả lời cho bất kỳ câu hỏi tương tự nào khác trên Lập trình viên.SE hoặc trên Stack Overflow. Đây cũng là một câu hỏi thú vị có thể trả lời khách quan.

Câu trả lời:


47

Chúng ta có thể có được một trích dẫn thực sự trước khi tham khảo năm 1963 của Hugo không? Đúng. John McCarthy đã sử dụng từ "chuỗi" trong các hàm đệ quy của biểu thức tượng trưng và tính toán của chúng bằng máy, Phần I , từ tháng 4 năm 1960.

Đối với các ký hiệu nguyên tử, chúng ta sẽ sử dụng các chuỗi chữ cái và chữ cái Latinh viết hoa

nhưng hữu ích hơn cho câu hỏi này, một tham chiếu đến một chuỗi dưới dạng kiểu dữ liệu:

Bất kỳ chuỗi ký tự được thừa nhận [là] một biểu thức L.

Đó không phải là một ví dụ tuyệt vời. Bằng cách nói "một chuỗi ký tự", McCarthy không sử dụng "chuỗi" theo nghĩa các lập trình viên chuyên ngành nghĩa là ngày nay. Bạn có thể dễ dàng nói "một chuỗi" với một lập trình viên Java và họ sẽ biết rằng phần "của các ký tự" là ẩn: việc sử dụng McCarthy không thể hiện tính năng này. Chúng ta hãy cố gắng quay trở lại những năm 1950, để xem liệu McCarthy đã chơi nó an toàn hay liệu thuật ngữ này thực sự không tồn tại sau đó. LISP có lẽ sẽ không giúp được gì nhiều ở đây, vì nó dựa trên phép tính toán học nên các hàm chuỗi của McCarthy có thể là ứng dụng đầu tiên của ý tưởng để xử lý chuỗi.

Một hệ thống xử lý chuỗi quan trọng của thập niên 1960 là SNOBOL năm 1964 , Ngôn ngữ thao tác chuỗi . Điều này trích dẫn bài báo của McCarthy ở trên, nhưng cũng thảo luận về COMIT và SCL. Công việc họ trích dẫn trên SCL chưa được công bố: một ngõ cụt đáng tiếc.

COMIT dễ theo dõi hơn. Nghệ thuật lập trình máy tính (Tập 1, ấn bản thứ ba, tr.461) cho chúng ta biết VH Yngve đã viết một bài báo CACM năm 1963 về nó. Nhưng tôi đang tìm cách sử dụng "chuỗi" sớm nhất , vì vậy tôi sẽ tìm kiếm tác giả cho các ấn phẩm trước đó.

Cái đầu tiên tôi có thể tìm thấy là Ngôn ngữ lập trình cho dịch thuật cơ học , từ tháng 7 năm 1958. Điều này chỉ chứa một cách sử dụng từ "chuỗi":

Mỗi chuỗi chữ cái liên tục giữa các dấu chấm hoặc dấu cách được tra cứu trong từ điển.

Một lần nữa, cách sử dụng này giống như của McCarthy: đây không phải là bằng chứng cho "chuỗi" được sử dụng theo nghĩa ngày nay. Nhìn vào bài báo một cách chi tiết, chúng ta thấy rằng cấu trúc dữ liệu là một "dòng" trên thẻ (cho phép tiếp tục cho các "dòng" dài hơn).

OK, chúng ta sẽ tiến lên trong lịch sử của COMIT và xem những gì chúng ta có thể nhận được. Tài liệu tham khảo hữu ích đầu tiên là Hệ thống COMIT cho dịch cơ học , từ các thủ tục tố tụng của một hội nghị tháng 6 năm 1959.

Nếu chúng ta muốn thay thế D SIN (F) bằng COS (F) D (F), trong đó F không bị hạn chế và có thể là bất kỳ chuỗi thành phần tùy ý nào, chúng ta sử dụng ký hiệu $ để thay thế cho chuỗi này.

Điều này có vẻ giống với cách chúng ta sử dụng ngày nay: "chuỗi" đứng một mình và như một phần thưởng có một biểu tượng đặc biệt dễ nhận biết: ký hiệu đô la vẫn được sử dụng trong một số hương vị BASIC để biểu thị một biến chuỗi.

Từ khoảng thời gian này, từ "chuỗi" cũng xuất hiện nhiều lần trong ngôn ngữ lệnh A để xử lý các chuỗi ký hiệu của Perlis và Smith từ Kỷ yếu ACM '58, và một lần trong Hệ thống chia sẻ 709: Thực hiện lập trình biểu tượng bằng máy của Boehm và Thép.

Tìm kiếm thư viện kỹ thuật số ACM cho 'chuỗi' vào đầu những năm 1960 mang lại 62 kết quả, bao gồm các tiêu đề như "Xử lý chuỗi trong ALGOL", "Thao tác chuỗi trong ngôn ngữ mới" và "Kỹ thuật lưu trữ kiểu danh sách cho thông tin chữ và số". Có vẻ như ý tưởng đã trở nên cố thủ sau đó.

Tôi sẽ lập luận rằng "chuỗi" trong thuật ngữ khoa học máy tính của nó có nghĩa là một danh sách các nhân vật được sắp xếp trở nên phổ biến trong vài năm khoảng năm 1960. Trước đó, các tác giả như Yngwe và McCarthy có thể nói "chuỗi ký tự" và chắc chắn rằng họ là hiểu, nhưng không thể sử dụng "chuỗi" như một từ trần theo nghĩa nó được sử dụng ngày nay.

Tốc ký có lẽ đã được giới thiệu cho dòng máy tính chính bởi bài báo Perlis và Smith. Nó chưa được trích dẫn rộng rãi, nhưng một trích dẫn quan trọng là cú pháp ngữ pháp và ngữ nghĩa cho ALGOL của Joseph W. Smith vào tháng 4 năm 1960 (trong cùng một vấn đề về CACM như mô tả về LISP của McCarth). Từ tờ giấy đó:

Mục đích của bài viết này là đề xuất một tập hợp cú pháp cú pháp và ngữ nghĩa cho ALGOL. Các phần mở rộng được đề xuất được thiết kế để tạo điều kiện cho việc mô tả thao tác "chuỗi" trong ngôn ngữ đó; chúng không tạo thành một ngôn ngữ toàn diện cho thao tác biểu tượng.

Đối với tôi, điều này tạo thành bằng chứng của "chuỗi" có nghĩa là một kiểu dữ liệu cho tính toán tượng trưng được khẳng định trong từ vựng học thuật, và quan trọng là giới thiệu các công cụ được sử dụng cho tính toán thương mại.

Ngẫu nhiên, Ngôn ngữ lập trình: Lịch sử và Tương lai của Jean Sammet (1972) cho thấy COMIT và SNOBOL là những người khởi xướng thao tác chuỗi, vì vậy tôi khá tự tin rằng sẽ không có ví dụ nào trước đó.


2
Ồ Khảo cổ học vĩ đại đấy.
sclv

4
Điều này làm tôi nhớ đến quá trình biến "xe lửa" nơi xe lửa được sử dụng như tàu hỏa của một chiếc váy cưới, thành "tàu hỏa" như một hình thức vận chuyển. Việc chuyển từ "chuỗi ký tự" sang chỉ "chuỗi" là chìa khóa
Kate Gregory

2
OED đã thực hiện công việc này rồi. Mục nhập cho chuỗi (paywall, nhưng các thành viên thư viện ở Vương quốc Anh có thể truy cập được) có "1954 Jrnl. PGS Máy tính 1 120/2 Một chuỗi các thành viên của bảng chữ cái hữu hạn, có thể là null." mà theo tôi là chính xác cách sử dụng hiện đại.
AakashM

1
@AakashM cảm ơn bạn đã tham khảo, kết quả năm 1954 của họ phù hợp với các kết quả khác tôi tìm thấy trong những năm 1950. Từ "chuỗi" chỉ được sử dụng theo nghĩa "chuỗi ký tự" khi ý nghĩa của nó theo nghĩa đó được giải thích . Mãi đến năm 1960, các tác giả mới có thể sử dụng "chuỗi" mà không cần giải thích, và nó đã trở thành một thuật ngữ biệt ngữ với ý nghĩa cụ thể hơn như được sử dụng trong câu hỏi.

1
@AakashM Các lớp OED năm 1954 theo Toán học, v.v ... Một chuỗi các ký hiệu hoặc các yếu tố ngôn ngữ theo một trật tự xác định , với một ví dụ đầu tiên từ một cuốn sách Logic tượng trưng năm 1932 . Họ có một mục riêng cho máy tính. Một chuỗi các bản ghi hoặc dữ liệu tuyến tính , tôi đã thêm ví dụ đầu tiên vào năm 1956 vào câu trả lời của mình .
Hugo

14

Không phải là một câu trả lời hoàn chỉnh, nhưng việc sử dụng chuỗi có nghĩa là "một số đối tượng được sắp xếp trong một dòng" đã xuất hiện vào cuối những năm 1400. Nguồn

Đây thực chất là cùng một cách sử dụng.


5

Các tài liệu tham khảo sớm nhất tôi có thể tìm thấy trong máy tính là từ ngày năm 1963 's METEOR: Một Interpreter LISP cho String Transformations bởi Daniel G. Bobrow tại MIT AI Labs.

Các điển tiếng Anh Oxford có một ví dụ tính toán trước đó từ một năm 1956 vấn đề của Tạp chí của ACM :

Các khu vực được đặt sang một bên để xáo trộn các chuỗi điều khiển qua lại cho đến khi thu được một chuỗi được sắp xếp hoàn chỉnh.

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.