谁发明了指针?


12

很简单的问题,但我一直无法找出答案。谁是第一个描述指针概念的人?抽象概念本身?


8
考虑到指针只是对内存的引用,我假设自计算开始以来就已经存在指针(以某种形状或形式)。您还怎么读一点记忆?
罗布

3
让我们不要忘记此处的指令指针(IP)(又称为程序计数器)。“实际上,程序计数器(或用于相同目的的任何等效硬件块)对于冯·诺依曼架构非常重要。”
Scott Whitlock,

@Rob-存在通过计时而不是通过地址而不是通过地址访问的存储器存储(至少在最低级别)-汞延迟线等。原则上,可以进行某些类型的信息处理而无需发明地址。另外,图灵机模型只有一个磁带(哎呀,为什么我要说堆栈?)。IOW有“可能还有其他答案”的答案,尽管在现实生活中我认为您是对的。
Steve314,2011年

Answers:


4

Bud Lawson因在1964年发明了指针变量而在几年前获得了IEEE的计算机先锋奖


1963年,谢尔曼(PM Sherman)早于他。请参见他的《数字计算机编程和编码》 viii。152:“这些索引寄存器指向内存中的位置;因此在使用时将它们称为指针。”
Geremia

15

指针实际上是由寄存器的内容寻址的存储区。这样,所有汇编语言都以某种方式实现了此目的,在此之前,所有硬编码的机器代码都实现了此目的。

关于实现此功能的第一台计算机,会有一些争论。据我所知, 曼彻斯特大学小型系统是第一个包含程序控制寄存器寻址的存储的系统。它可能在ENIAC系统之前,但是它的存储空间太小,以致于可寻址存储成为一个争论点。


+1我以为差分引擎太简单了,无法请求寄存器,但是有人知道分析引擎是否需要它们吗?

@Mark-这可能是定义问题。即使要执行一个简单的算术运算(如加法运算),您也需要两个输入值和一个输出,它们需要在机械中进行某种形式的表示。该表示形式可以称为寄存器。甚至算盘也可以声称具有寄存器。
Steve314,2011年

@Steve-好点。

这里的重点是“通过寄存器的内容寻址存储”。即使用另一个寄存器中的地址从其他内存中加载和存储寄存器的能力,以及操纵该地址的能力。
詹姆斯·安德森

5

指针是更广泛的参考。具有此类功能的第一种语言是ALGOL 60,可以按名称调用。SO的这个答案有一些细节。PL / I和BCPL一样都有指针,这意味着CPL可能也有指针,尽管我没有找到任何证据。CPL很难提供具体信息。

为了更直接地回答有关DW Barron,Christopher Strachey或Martin Richards的“谁”的问题,可能创造了“指针”一词。


别忘了B-它有指针!还有PL / I,我敢肯定还有其他人,这还不包括组装和图灵机。
2011年

那时就是1966年。

ALGOL有指点
凯文·克莱恩

4

很难确切猜出是谁提出的,但是IBM 704中的索引寄存器可能是第一个实现。因此,从编程语言的角度来看,毫无疑问它将是704的汇编语言。

显然,在此之后的几年时间里,人们才设计出高级编程语言来利用这一创新,但是到那时,大部分发明都完成了,并且主要归结为选择名称,符号等来描述硬件。支持的。


0

指针是基本概念,用于“间接寻址”至少追溯到6502的大多数CPU上的功能。

Commodore在其VIC 20,C64和C128计算机上使用了“内核”。可以调用一组固定的地址软件,然后将其重定向到当前代码。然后,他们可以在不破坏现有软件的情况下修改操作系统。

我认为8080和Z80也有间接地址,但我不确定,我在8008中也不记得它。


1
实际上,直接寻址也使用指针。它们只是编译时常量指针-当然,除非您使用的是自修改代码。我也是6502(或严格来说是6510)的粉丝-我的第一台机器是C64-但是该芯片在这里并不重要。早期的消费类微处理器并没有在新原理方面进行太多发明-这些想法已经存在了数十年。只是这些想法直到70年代才可以作为可负担的单个芯片实现,并且直到80年代才成为主流消费玩具。
Steve314,2011年

0

很好-1964年首次为PL / I编程语言开发了针对指针变量的具体语法和语义。

对此的开创性论文发表于1967年的1967年ACM通讯中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.