Information Processing Language
Information Processing Language (IPL) é uma linguagem de programação desenvolvida por Allen Newell, Cliff Shaw, e Herbert Simon da RAND Corporation e do Carnegie Institute of Technology criada cerca de 1956.[1] Newell tinha o papel de especificador linguagem programador da aplicação, Shaw era o programador do sistema e Simon assumiu o papel de programador do aplicativo do usuário.
Information Processing Language (IPL) | |
---|---|
Surgido em | 1956 |
Criado por | Allen Newell, Cliff Shaw, Herbert Simon |
Principais implementações | IPL-V, IPL-VI |
Influenciou | Lisp |
A linguagem inclui recursos destinados a apoiar programas que poderiam executar programas para solução geral de problemas(GPS - General Problem Solving), incluindo listas, associações, esquemas (frames), alocação dinâmica de memória, tipos de dados, recursividade, recuperação associativa, funções como argumentos, (geradores de fluxos), e multitarefa cooperativa. IPL foi pioneira no conceito de processamento de listas, embora em um estilo de linguagem de montagem.
Um gosto da IPL
editarUma computador IPL tem:
- Um conjunto de símbolos. Todos os símbolos são endereços e nomes de célula. Ao contrário dos símbolos nas linguagens posteriores, símbolos consistem de caracteres seguido por um números, e são escritos H1, A29, 9-7, 9-100.
- Nomes de células começando com uma letra são regionais, e são endereços absolutos.
- Nomes de células começando com "9 -" sãolocais, e são significativos dentro do contexto de uma lista única. Uma lista de 9-1 é independente de outra lista 9-1.
- Outros símbolos (por exemplo, puramente números) são internos.
- Um conjunto de células. As listas são construídas a partir de várias células com referência mútua. As células têm vários campos:
- P, um campo de 3 bits usado para um código de operação quando a célula é usada como uma instrução, e não usado quando a célula é de dados.
- Q, um campo com 3 valores usado para referência indireta quando a célula é usada como uma instrução, e não usado quando a célula é de dados.
- SYMB, um símbolo usado como o valor na célula.
- Um conjunto de processos primitivos, que seriam chamados de funções primitivas nas línguas modernas.
A estrutura de dados principal do IPL é a lista, mas as listas de IPL são estruturas mais complexas do que em muitas outras linguagens. Uma lista é constituída por uma única seqüência de símbolos ligados, como se poderia esperar -- acrescida de algumas listas de descrição, que são listas encadeadas subsidiárias, isoladamente, interpretadas como nomes de atributos e valores alternativos. IPL fornece primitivas para acessar e modificar o valor do atributo pelo nome. As listas de descrição recebem nomes locais (da forma 9-1). Assim, uma lista chamada L1 contendo os símbolos S4 e S5, e descrita pelo valor associado de V1 ao atributo A1 e V2 para A2, seria armazenada como se segue. 0 indica o fim de uma lista, os nomes de células 100, 101, etc são símbolos internos gerados automaticamente e cujos valores são irrelevantes. Essas células podem ser espalhadas por toda a memória; somente a L1, que usa um nome regional é que deve ser conhecida globalmente, tem de residir em um lugar específico.
Exemplo de Lista Estruturada em IPL-V
Name
SYMB
LINK
L1
9-1
100
100
S4
101
101
S5
0
9-1
0
200
200
A1
201
201
V1
202
202
A2
203
203
V2
0
IPL é uma linguagem de montagem para a manipulação de listas. Ela tem algumas células que são usadas como registradores de propósito especial. H1, por exemplo, é usada como contador de programa. O campo SYMB de H1 é o nome da instrução atual. Contudo, H1 é interpretada como uma lista; o LINK de H1, em termos atuais, é um ponteiro para a cabeça da pilha de chamadas. Por exemplo, chamadas de subrotinas empilham o SYMB de H1 na pilha.
H2 é a lista vazia. Procedimentos que necessitam alocar memória obtém células fora de H2; procedimentos que já terminaram com a utilização da memória a colocam em H2. À entrada para uma função, a lista de parâmetros é dada em H0, ao sair, os resultados devem ser devolvidos em H0. Muitos procedimentos retornam um resultado booleano indicando o sucesso ou fracasso, que é colocado em H5. Dez células, W0-W9, são reservados para armazenamento de trabalho em área pública. Os procedimentos são "moralmente vinculados" (para citar o artigo da Comunications of the ACM) para salvar e restaurar os valores destas células.
Há oito instruções, com base nos valores de P: chamada de subrotinas, empilhar/desempilhar S para H0; empilhar/desempilhar o símbolo em S para a lista anexa à S; copiar valor para S; instrução de seleção condicional. Nestas instruções, S é o alvo. S é tanto o valor do campo SYMB se Q = 0, o símbolo na célula nomeada como SYMB se Q = 1, ou o símbolo na célula nomeada pelo símbolo que está na célula nomeada por SYMB se Q = 2. Em todos os casos, exceto na ramificação condicional, o campo LINK da célula indica qual será a próxima instrução a ser executada.
IPL tem uma biblioteca de cerca de 150 operações básicas. Isso inclui operações como:
- Símbolos de teste para a igualdade
- Pesquisar, definir ou apagar um atributo de uma lista
- Localizar o próximo símbolo em uma lista; inserir um símbolo em uma lista, apagar ou copiar uma lista inteira.
- Operações aritméticas (em nomes simbolólicos).
- Manipulação de símbolos, por exemplo, testar se um símbolo representa um número inteiro, ou representa um símbolo local.
- Operações de Entrada/Saída
- "Geradores", que correspondem aos iteradores e os filtros na programação funcional. Por exemplo, um gerador pode aceitar uma lista de números e produzir a lista de seus quadrados. Um Geradore poderia aceitar funções devidamente projetadas - rigorosamente, os endereços de código das funções adequadamente concebidas - como argumentos.
História
editarA primeira aplicação do IPL foi demonstrar que os teoremas de Principia mathematica que eram laboriosamente comprovados a mão, por Bertrand Russell e Alfred North Whitehead, poderiam ser de fato provados por computação. De acordo com a autobiografia de Simon Models of My Life, esta primeira aplicação foi desenvolvida por meio de simulação manual, usando seus filhos como elementos de computação, enquanto escrevia sobre e segurando cartões com anotações como os registros que continham as variáveis de estado do programa .
IPL foi utilizada para implementar vários dos programas iniciais do campo da inteligência artificial, também pelos mesmos autores: o Logic Theory Machine (1956), o General Problem Solver (1957), e seus programas de computador para jogos de xadrez NSS (1958).
Várias versões do IPL foram criadas: IPL-I (nunca implementada), LPI-II (1957 por Johnniac), IPL-III (existiu momentaneamente), IPL-IV, IPL-V (1958, para os computadores IBM 650, IBM 704, IBM 7090, e muitos outros. Amplamente utilizada), IPL-VI.
No entanto, a linguagem foi rapidamente substituída pela linguagem de programação Lisp, que tinha características muito mais poderosas, uma sintaxe mais simples, e os benefícios da coleta de lixo automática coleta de lixo.
Legado para a programação de computadores
editarIPL provavelmente introduziu vários recursos das linguagens de programação:
- Manipulãção de Listas (somente listas de átomos, não listas em geral)
- Listas de propriedades (mas só quando ligado a outras listas)
- Funções de ordem superior (excetuando-se o fato de que a linguagem de montagem sempre foi capaz de calcular com endereços das funções de chamada; IPL foi uma tentativa de generalizar esta propriedade da linguagem assembly e fazê-la de maneira fundamentada.)
- Computatação com símbolos (exceto que os símbolos são formados por número+letra e não palavras completas)
- Máquina virtual
Muitos desses recursos foram generalizadas, clareados, e incorporados ao Lisp[2] e do Lisp para uma ampla gama de linguagens de programação ao longo das décadas seguintes.
Publicações
editar- Newell, A. and F.C. Shaw. "Programming the Logic Theory Machine." Feb. 1957. Proceedings of the Western Joint Computer Conference, pp. 230-240.
- Newell, Allen, and Fred M. Tonge. 1960. "An Introduction to Information Processing Language V." CACM 3(4): 205-211.
- Newell, Allen. 1964. Information processing language-v manual; Second Edition. Rand Corporation
[Allen Newell], Englewood Cliffs, NJ: Prentice-Hall.
Referências
- ↑ Wexelblat, Richard L.(Editor) (1981). History of Programming Languages. New York: Academic Press. p. 174. 758 páginas. ISBN 0-12-745040-8
- ↑ «Pré- História do LISP». Consultado em 6 de janeiro de 2012
Bibliografia
editar- HOROWITZ, Ellis (editor) (1987). Programming Languages. A Grand Tour 3ª ed. Rockvile: Computer Science Press. 512 páginas
- Simon, Herbert A.; Newell, Allen (1986). «Information Processing Language V on the IBM 650». Annals of The History of Computing (em inglês). 8 (1). Arlington, VA: American Federation of Information Processing Societies. 111 páginas. ISSN 1058-6180
Ligações externas
editar- Allen Newell, Herbert A. Simon, Biographical Memoirs, National Academy of Sciences - inclui uma pequena seção sobre IPL.
- History of Programming Languages: IPL
- [1] influencia da IPL no LISP.