Pergunta bastante simples, mas algo que não consegui descobrir. Quem foi a primeira pessoa a descrever a idéia de um ponteiro? O próprio conceito abstrato?
Considerando que ponteiros são apenas referências à memória, suponho que ponteiros (de alguma forma ou forma) existam desde o início da computação. De que outra forma você leria um pouco de memória?
Rob
3
Não vamos esquecer o ponteiro de instruções (IP) aqui (também conhecido como contador de programas ). "De fato, o contador de programas (ou qualquer bloco equivalente de hardware que atenda ao mesmo propósito) é muito central para a arquitetura de von Neumann".
Scott Whitlock
@ Rob - houve armazenamentos de memória que foram acessados (pelo menos no nível mais baixo) por tempo e não por endereço - linhas de atraso de mercúrio etc. Em princípio, seria possível fazer alguns tipos de processamento de informações sem inventar endereços. Além disso, o modelo da máquina de Turing tinha apenas uma fita (opa, por que eu disse pilha?). Existem respostas possíveis para "como mais?", No entanto, na vida real, imagino que você esteja certo.
O PM Sherman, em 1963, é anterior a ele. Veja sua programação e codificação de computadores digitais viii. 152: "Esses registros de índice apontam para os locais na memória; portanto, são chamados de ponteiros quando usados."
Geremia 12/06
15
Ponteiros são realmente armazenamento endereçado pelo conteúdo de um registro. Como tal, todas as linguagens assembler implementam isso de alguma maneira e, antes disso, todo código de máquina codificado implementava isso.
Haverá algum argumento sobre o primeiro computador que implementou isso. Tanto quanto sei, o Sistema de Pequena Escala da Universidade de Manchestern foi o primeiro a incluir armazenamento endereçado por registros controlados por programas. Pode ter sido precedido pelo sistema ENIAC, mas tinha tão pouco armazenamento que fazia do armazenamento endereçável um ponto discutível.
+1 Estou assumindo que o Mecanismo de Diferenças era muito simples para exigir registros, mas alguém sabe se o Mecanismo Analítico precisaria deles?
@ Mark - isso pode ser um problema de definição. Mesmo para executar uma única operação aritmética como uma adição, você tem dois valores de entrada e uma saída que precisam de algum tipo de representação na maquinaria. Essa representação poderia ser chamada de registro. Mesmo um ábaco pode ser reivindicado como tendo um registro.
Steve314
@Steve - Bom ponto.
O ponto principal aqui é "armazenamento endereçado pelo conteúdo de um registro". ou seja, a capacidade de carregar e armazenar um registro de outra memória, usando o endereço em outro registro e a capacidade de manipular esse endereço.
James Anderson
5
Ponteiros são mais amplamente referências. O primeiro idioma a ter algo parecido foi o ALGOL 60, que poderia ser chamado pelo nome. Esta resposta no SO entra em alguns detalhes. O PL / eu tinha indicadores, assim como o BCPL, o que significa que o CPL provavelmente também o fez, embora eu não tenha encontrado nenhuma evidência para isso. A CPL é muito difícil de obter informações concretas.
Para responder mais diretamente à sua pergunta sobre "quem", DW Barron, Christopher Strachey ou Martin Richards, provavelmente cunharam o termo "ponteiro".
Não esqueça B - tinha ponteiros! Também PL / I, e tenho certeza de que há outros antes, sem contar as máquinas de montagem e Turing.
Pubby
Então isso seria 1966 então.
World Engineer
ALGOL tinha ponteiros
kevin cline 14/10
4
É difícil adivinhar exatamente quem os criou, mas os registros de índice no IBM 704 foram provavelmente a primeira implementação. Do ponto de vista da linguagem de programação, portanto, seria sem dúvida a linguagem assembly dos anos 70.
Aparentemente, levou alguns anos depois disso antes que as linguagens de programação de nível superior fossem projetadas para tirar proveito dessa inovação, mas nessa época a maior parte da invenção foi concluída e, na maior parte, se resumiu a escolher nomes, notações etc. para descrever o que o hardware suportado.
Os ponteiros como conceito básico são usados no "endereçamento indireto" de uma função na maioria das CPUs que remontam pelo menos ao 6502.
O Commodore usou o "kernal" em seus computadores VIC 20, C64 e C128. poderia chamar um conjunto fixo de software de endereço que seria redirecionado para o código atual. Eles poderiam modificar o sistema operacional sem interromper o software existente.
Acho que o 8080 e o Z80 também tinham endereço indireto, mas não tenho certeza e não me lembro disso no 8008.
Na verdade, os ponteiros também são usados pelo endereçamento direto. Eles são apenas indicadores constantes em tempo de compilação - a menos que você esteja usando código de modificação automática, é claro. Também sou fã do 6502 (ou estritamente o 6510) - minha primeira máquina foi um C64 -, mas esse chip não é realmente relevante aqui. Os primeiros microprocessadores de consumo não inventaram muito na maneira de novos princípios - as idéias já existiam há décadas. Só que essas idéias não eram implementáveis como chips únicos acessíveis até os anos 70 e não se tornaram brinquedos tradicionais até os anos 80.
Steve314
0
Bem - A primeira vez que uma sintaxe e semântica concretas foram desenvolvidas para variáveis de ponteiro foi para a linguagem de programação PL / I em 1964.
O artigo seminal sobre isso apareceu em 1967 na ACM Communications em 1967.
Respostas:
Há alguns anos, Bud Lawson recebeu o Prêmio de Pioneiro em Computador do IEEE, por ter inventado a variável ponteiro em 1964.
fonte
Ponteiros são realmente armazenamento endereçado pelo conteúdo de um registro. Como tal, todas as linguagens assembler implementam isso de alguma maneira e, antes disso, todo código de máquina codificado implementava isso.
Haverá algum argumento sobre o primeiro computador que implementou isso. Tanto quanto sei, o Sistema de Pequena Escala da Universidade de Manchestern foi o primeiro a incluir armazenamento endereçado por registros controlados por programas. Pode ter sido precedido pelo sistema ENIAC, mas tinha tão pouco armazenamento que fazia do armazenamento endereçável um ponto discutível.
fonte
Ponteiros são mais amplamente referências. O primeiro idioma a ter algo parecido foi o ALGOL 60, que poderia ser chamado pelo nome. Esta resposta no SO entra em alguns detalhes. O PL / eu tinha indicadores, assim como o BCPL, o que significa que o CPL provavelmente também o fez, embora eu não tenha encontrado nenhuma evidência para isso. A CPL é muito difícil de obter informações concretas.
Para responder mais diretamente à sua pergunta sobre "quem", DW Barron, Christopher Strachey ou Martin Richards, provavelmente cunharam o termo "ponteiro".
fonte
É difícil adivinhar exatamente quem os criou, mas os registros de índice no IBM 704 foram provavelmente a primeira implementação. Do ponto de vista da linguagem de programação, portanto, seria sem dúvida a linguagem assembly dos anos 70.
Aparentemente, levou alguns anos depois disso antes que as linguagens de programação de nível superior fossem projetadas para tirar proveito dessa inovação, mas nessa época a maior parte da invenção foi concluída e, na maior parte, se resumiu a escolher nomes, notações etc. para descrever o que o hardware suportado.
fonte
Os ponteiros como conceito básico são usados no "endereçamento indireto" de uma função na maioria das CPUs que remontam pelo menos ao 6502.
O Commodore usou o "kernal" em seus computadores VIC 20, C64 e C128. poderia chamar um conjunto fixo de software de endereço que seria redirecionado para o código atual. Eles poderiam modificar o sistema operacional sem interromper o software existente.
Acho que o 8080 e o Z80 também tinham endereço indireto, mas não tenho certeza e não me lembro disso no 8008.
fonte
Bem - A primeira vez que uma sintaxe e semântica concretas foram desenvolvidas para variáveis de ponteiro foi para a linguagem de programação PL / I em 1964.
O artigo seminal sobre isso apareceu em 1967 na ACM Communications em 1967.
fonte