Ai đã phát minh ra con trỏ?


12

Câu hỏi khá đơn giản, nhưng tôi không thể tìm ra câu hỏi nào. Ai là người đầu tiên mô tả ý tưởng về một con trỏ? Bản thân khái niệm trừu tượng?


8
Xem xét các con trỏ chỉ là các tham chiếu đến bộ nhớ, tôi giả sử các con trỏ (ở một số hình dạng hoặc hình thức) đã tồn tại kể từ khi bắt đầu tính toán. Làm thế nào khác bạn sẽ đọc một chút bộ nhớ?
Cướp

3
Chúng ta đừng quên Con trỏ lệnh (IP) tại đây (còn gọi là Bộ đếm chương trình ). "Thật vậy, bộ đếm chương trình (hoặc bất kỳ khối phần cứng tương đương nào phục vụ cùng mục đích) rất quan trọng đối với kiến ​​trúc von Neumann."
Scott Whitlock

@Rob - đã có các cửa hàng bộ nhớ được truy cập (ít nhất là ở mức thấp nhất) theo thời gian chứ không phải theo địa chỉ - dòng trì hoãn thủy ngân, v.v. Về nguyên tắc, có thể thực hiện một số loại xử lý thông tin mà không cần phát minh địa chỉ. Ngoài ra, mô hình máy Turing chỉ có một cuộn băng (rất tiếc, tại sao tôi lại nói stack?). Có những câu trả lời khả dĩ cho "làm thế nào khác?", IOW, mặc dù trong cuộc sống thực tôi tưởng tượng bạn đúng.
Steve314

Câu trả lời:


4

Bud Lawson đã nhận được Giải thưởng Tiên phong Máy tính của IEEEvài năm trước, vì đã phát minh ra biến con trỏ vào năm 1964.


Thủ tướng Sherman, vào năm 1963, có trước ông. Xem Lập trình & mã hóa Máy tính kỹ thuật số viii của anh ấy . 152: "Các thanh ghi chỉ mục này trỏ đến các vị trí trong bộ nhớ; do đó chúng được gọi là các con trỏ khi được sử dụng."
Geremia

15

Con trỏ thực sự được lưu trữ theo địa chỉ của một thanh ghi. Như vậy, tất cả các ngôn ngữ trình biên dịch đều thực hiện điều này theo một cách nào đó và trước đó, tất cả các mã máy mã hóa cứng đã thực hiện điều này.

Sẽ có một số tranh luận về máy tính đầu tiên thực hiện điều này. Theo như tôi biết, Hệ thống quy mô nhỏ của Đại học Manchesternhệ thống đầu tiên bao gồm lưu trữ được giải quyết bởi các thanh ghi kiểm soát chương trình. Nó có thể đã được hệ thống ENIAC đi trước nhưng nó có rất ít bộ lưu trữ để biến việc lưu trữ theo địa chỉ thành một điểm cần thiết.


+1 Tôi cho rằng Công cụ khác biệt quá đơn giản để yêu cầu các thanh ghi, nhưng có ai biết liệu Công cụ phân tích có cần chúng không?

@Mark - đây có thể là một vấn đề định nghĩa. Ngay cả để thực hiện một thao tác số học duy nhất như một phép cộng, bạn có hai giá trị đầu vào và đầu ra cần một số loại biểu diễn trong máy. Đại diện đó có thể được gọi là một đăng ký. Ngay cả một bàn tính cũng có thể được yêu cầu có một đăng ký.
Steve314

@Steve - Điểm tốt.

Điểm mấu chốt ở đây là "lưu trữ được giải quyết theo nội dung của một thanh ghi". tức là khả năng tải và lưu trữ một thanh ghi từ một số bộ nhớ khác, sử dụng địa chỉ trong một thanh ghi khác và khả năng thao tác địa chỉ này.
James Anderson

5

Con trỏ được tham khảo rộng hơn. Ngôn ngữ đầu tiên có bất cứ thứ gì như thế là ALGOL 60 có thể gọi bằng tên. Câu trả lời này trên SO đi vào một số chi tiết. PL / Tôi đã có con trỏ như BCPL , điều đó có nghĩa là CPL có thể cũng vậy mặc dù tôi không tìm thấy bất kỳ bằng chứng nào cho việc này. CPL là rất khó để cụ thể thông tin trên.

Để trả lời trực tiếp hơn câu hỏi của bạn với "ai" hoặc DW Barron, Christopher Strachey hoặc Martin Richards có lẽ đã đặt ra thuật ngữ "con trỏ".


Đừng quên B - nó có con trỏ! Ngoài ra PL / I, và tôi chắc chắn có những người khác trước đó, không tính máy lắp ráp và máy Turing.
Pubby

Vì vậy, đó sẽ là năm 1966.
Kỹ sư thế giới

ALGOL có con trỏ
kevin cline

4

Thật khó để đoán chính xác ai đã đưa ra chúng, nhưng các thanh ghi chỉ mục trong IBM 704 có lẽ là triển khai đầu tiên. Do đó, từ quan điểm ngôn ngữ lập trình, chắc chắn nó sẽ là ngôn ngữ lắp ráp của 704.

Rõ ràng phải mất vài năm sau đó, trước khi các ngôn ngữ lập trình cấp cao hơn được thiết kế để tận dụng sự đổi mới này, nhưng sau đó hầu hết các phát minh đã được thực hiện, và chủ yếu là chọn tên, ký hiệu, v.v. để mô tả phần cứng là gì được hỗ trợ.


0

Con trỏ như một khái niệm cơ bản được sử dụng trong "địa chỉ gián tiếp" một chức năng trên hầu hết các CPU trở lại ít nhất là 6502.

Commodore đã sử dụng "hạt nhân" trên các máy tính VIC 20, C64 và C128 của mình. một bộ phần mềm địa chỉ cố định có thể gọi mà sau đó sẽ được chuyển hướng đến mã hiện tại. Sau đó, họ có thể sửa đổi hệ điều hành mà không phá vỡ phần mềm hiện có.

Tôi nghĩ rằng 8080 và Z80 cũng có địa chỉ gián tiếp, nhưng tôi không chắc chắn và tôi không nhớ nó trong 8008.


1
Trên thực tế, con trỏ được sử dụng bằng cách giải quyết trực tiếp quá. Tất nhiên, chúng chỉ là các con trỏ liên tục biên dịch - trừ khi bạn đang sử dụng mã tự sửa đổi. Tôi cũng là một fan hâm mộ của 6502 (hay đúng ra là 6510) - máy đầu tiên của tôi là C64 - nhưng con chip đó không thực sự phù hợp ở đây. Các bộ vi xử lý tiêu dùng ban đầu đã không phát minh ra nhiều theo cách của các nguyên tắc mới - các ý tưởng đã xuất hiện trong nhiều thập kỷ. Chỉ là những ý tưởng đó không thể thực hiện được như những con chip giá cả phải chăng cho đến những năm 70 và không trở thành đồ chơi tiêu dùng chính thống cho đến những năm 80.
Steve314

0

Vâng - Lần đầu tiên một cú pháp cụ thể và ngữ nghĩa được phát triển cho các biến con trỏ là cho Ngôn ngữ lập trình PL / I vào năm 1964.

Bài báo chuyên đề về điều này xuất hiện vào năm 1967 trong Truyền thông ACM năm 1967.

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.