누가 포인터를 발명 했습니까?


12

아주 간단한 질문이지만 찾을 수 없었습니다. 포인터의 아이디어를 최초로 설명한 사람은 누구입니까? 추상적 개념 자체?


8
포인터가 메모리에 대한 참조 일 뿐이라고 생각할 때, 컴퓨팅 시작 이후 포인터 (일부 모양 또는 형태)가 존재한다고 가정합니다. 메모리를 조금 더 읽어 보시겠습니까?
Rob

3
여기서 명령어 포인터 (IP) (일명 프로그램 카운터 )를 잊지 마십시오 . "실제로 프로그램 카운터 (또는 동일한 목적을 수행하는 동등한 하드웨어 블록)는 폰 노이만 아키텍처의 중심에 있습니다."
Scott Whitlock

@Rob-주소-수은 지연 라인 등이 아닌 타이밍에 의해 (적어도 가장 낮은 수준에서) 액세스 된 메모리 저장소가 있습니다. 원칙적으로 주소를 발명하지 않고도 일종의 정보 처리를 수행 할 수 있습니다. 또한, 튜링 머신 모델에는 테이프 만있었습니다. "어떻게 다른 방법으로?"에 대한 답변이있을 수 있지만, 실제 상황에서는 당신이 옳다고 생각합니다.
Steve314

답변:


4

Bud Lawson 은1964 년에 포인터 변수를 발명 한 데 몇 년 전IEEE의 Computer Pioneer Award를 수상 했습니다.


1963 년 PM 셔먼은 그보다 앞서있다. 그의 프로그래밍 및 코딩 디지털 컴퓨터를보십시오 . viii. 152 : "이 인덱스 레지스터는 메모리의 위치를 ​​가리 키므로 사용되는 경우 포인터라고합니다."
Geremia

15

포인터는 실제로 레지스터의 내용으로 주소가 지정됩니다. 이와 같이 모든 어셈블러 언어는 어떤 식 으로든이를 구현하며, 그 전에 모든 하드 코딩 된 기계 코드가이를 구현합니다.

이것을 구현 한 첫 번째 컴퓨터에 대한 논쟁이있을 것입니다. 내가 아는 한 맨체스터 대학교 소규모 시스템 은 프로그램 제어 레지스터로 주소가 지정된 스토리지를 최초로 포함했습니다. ENIAC 시스템이 우선했을 수도 있지만 어드레싱 가능한 스토리지를 약점으로 만들기에는 스토리지가 거의 없습니다.


+1 Difference Engine이 레지스터를 요구하기에는 너무 단순하다고 가정하지만, 분석 엔진이 그것들을 필요로했는지 아는 사람이 있습니까?

@Mark-정의 문제 일 수 있습니다. 덧셈과 같은 단일 산술 연산을 수행하더라도 기계에 어떤 종류의 표현이 필요한 두 개의 입력 값과 출력이 있습니다. 이 표현을 레지스터라고 할 수 있습니다. 주판조차도 등록 소를 가지고 있다고 주장 할 수 있습니다.
Steve314

@Steve-좋은 지적입니다.

여기서 중요한 점은 "레지스터 내용으로 주소가 지정된 스토리지"입니다. 즉, 다른 레지스터의 주소를 사용하여 다른 메모리에서 레지스터를로드하고 저장하는 기능 및이 주소를 조작하는 기능.
James Anderson

5

포인터는 더 광범위하게 참조입니다. 그런 언어를 가진 최초의 언어는 이름으로 전화 할 수있는 ALGOL 60이었습니다. SO에 대한답변 은 자세하게 설명합니다. PL / I는 BCPL 과 마찬가지로 포인터를 가지고 있었으므로 CPL에 대한 증거를 찾지 못했지만 CPL도 아마 그렇게했을 것입니다. CPL은 구체적인 정보를 얻기가 매우 어렵습니다.

DW Barron, Christopher Strachey 또는 Martin Richards와 같은 "누가"에 대한 질문에 더 직접 대답하려면 아마도 "포인터"라는 용어를 사용했을 것입니다.


B를 잊지 마십시오-포인터가있었습니다! 또한 PL / I는 조립 및 튜링 기계를 포함하지 않고 다른 부품이 있다고 확신합니다.
Pubby

그러면 1966 년이됩니다.
세계 엔지니어

ALGOL은 포인터를 가졌다
kevin cline 13:14의

4

누가 정확한지 추측하기는 어렵지만 IBM 704의 인덱스 레지스터는 아마도 첫 번째 구현 일 것입니다. 따라서 프로그래밍 언어 관점에서 볼 때 의심 할 여지없이 704의 어셈블리 언어 일 것입니다.

고급 프로그래밍 언어가이 혁신을 활용하도록 설계되기까지 몇 년이 걸렸지 만, 그 때까지 대부분의 발명이 이루어졌으며, 대부분 하드웨어 이름을 나타내는 이름, 표기법 등을 선택했습니다. 지원됩니다.


0

기본 개념 인 포인터는 최소한 6502로 돌아가는 대부분의 CPU에서 기능을 "간접 주소 지정"에 사용합니다.

Commodore는 VIC 20, C64 및 C128 컴퓨터에서 "kernal"을 사용했습니다. 고정 된 주소 소프트웨어 집합이 호출되어 현재 코드로 리디렉션 될 수 있습니다. 그런 다음 기존 소프트웨어를 손상시키지 않고 OS를 수정할 수 있습니다.

8080과 Z80에도 간접 주소가 있다고 생각하지만 확실하지 않으며 8008에서 기억하지 못합니다.


1
실제로 포인터는 직접 주소 지정으로도 사용됩니다. 물론 자체 수정 코드를 사용하지 않는 한 컴파일 타임 상수 포인터입니다. 나는 6502 (또는 엄격하게 6510)의 팬이기도합니다. 첫 번째 컴퓨터는 C64였습니다. 그러나 그 칩은 실제로 관련이 없습니다. 초기 소비자 마이크로 프로세서는 새로운 원칙의 방식으로 많은 것을 발명하지 못했습니다. 아이디어는 이미 수십 년 전부터있었습니다. 이러한 아이디어는 70 년대까지 단일 칩으로 구현할 수 없었으며 80 년대까지는 주류 소비자 완구가되지 않았다는 것입니다.
Steve314

0

글쎄-포인터 변수를 위해 개발 된 구체적인 구문과 의미론은 1964 년 PL / I 프로그래밍 언어를위한 것이 었습니다.

이에 관한 주요 논문은 1967 년 ACM Communications에 1967 년에 게재되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.