Gemas de Software: The Computer History Museum Historical Source Code Series
Ken Iverson na Universidade de Harvard
Milhares de linguagens de programação foram inventadas nos primeiros 50 anos da era da computação. Muitas delas eram semelhantes, e muitas seguiram um caminho tradicional e evolutivo dos seus predecessores.
Mas algumas linguagens revolucionárias tinham uma inclinação que as diferenciava dos seus irmãos de propósito mais geral. LISP era para o processamento de listas. SNOBOL era para manipulação de strings. SIMSCRIPT era para simulação. E APL era para matemática, com ênfase no processamento de array.
O que eventualmente se tornou APL foi inventado pelo professor de Harvard Kenneth E. Iverson em 1957 como uma notação matemática, não como uma linguagem de programação de computador. Embora existissem outros sistemas de símbolos orientados a matrizes, incluindo a notação tensora concisa inventada por Einstein, eles eram mais orientados à análise matemática e menos à síntese de algoritmos. Iverson, que era um aluno de Howard Aiken, ensinou o que ficou conhecido como “Iverson Notation” aos seus alunos de Harvard para explicar algoritmos.
Iverson foi contratado pela IBM em 1960 para trabalhar com Adin Falkoff e outros na sua notação. Em seu agora famoso livro de 1962 “A Programming Language” 1, ele diz que a notação é para a descrição de “procedimentos…chamados algoritmos ou programas”, e que é uma linguagem porque “exibe uma estrutura sintáctica considerável”. Mas nesse ponto era apenas uma notação para as pessoas lerem, não uma linguagem para programar computadores. O livro dá muitos exemplos de seu uso tanto como ferramenta descritiva (como para documentar a definição de conjuntos de instruções de computador) quanto como meio de expressar algoritmos gerais (como para ordenação e pesquisa). Antecipando a resistência a algo tão novo, ele diz no prefácio: “É a tese central deste livro que o poder descritivo e analítico de uma linguagem de programação adequada retribui amplamente o considerável esforço necessário para o seu domínio”. Talvez ele estivesse avisando que dominar a linguagem não era trivial. Talvez ele também estivesse sinalizando que, na sua opinião, outras linguagens de notação eram menos que “adequadas”.
A equipe, é claro, logo viu que a notação poderia ser transformada em uma linguagem para programação de computadores. Essa linguagem, que foi chamada de APL a partir de 1966, enfatizava a manipulação de array e usava símbolos não convencionais. Era como nenhuma outra linguagem de programação de computadores que tinha sido inventada.
APL tornou-se popular quando a IBM introduziu “APL360” para o seu computador mainframe System/360. Ao contrário da maioria das outras linguagens da altura, o APL360 era também um ambiente de programação interactivo completo. O programador, sentado numa máquina de escrever electromecânica ligada a um computador a tempo parcial, podia escrever declarações APL e obter uma resposta imediata. Os programas podiam ser definidos, depurados, executados e salvos em um computador que estava sendo usado simultaneamente por dezenas de outras pessoas.
Escrito inteiramente em 360 linguagem assembly, esta versão da APL assumiu o controle de toda a máquina. Ele implementou um sistema operacional completo de timesharing além de uma linguagem de alto nível.
Com a permissão da IBM, o Computer History Museum tem o prazer de disponibilizar o código fonte para a versão “XM6” da APL 1969-1972 para o Sistema/360 para uso não comercial.
O arquivo de texto contém 37.567 linhas, que incluem código, macros e definições globais. Os 90 arquivos individuais são separados por comandos ‘./ ADD”. Para acessar este material, você deve concordar com os termos da licença exibida aqui, que permite apenas uso não-comercial e não lhe dá o direito de licenciá-lo a terceiros postando cópias em outro lugar na web.
Download APL360 Código Fonte
Jürgen Winkelmann no ETH Zürich fez um trabalho incrível de transformar este código fonte em um sistema executável. Para mais informações, veja MVT para APL Versão 2.00.
Criando a Linguagem de Programação APL
O livro de Iverson “A Programming Language” 1 usa uma notação gráfica que teria sido difícil de usar diretamente como uma linguagem de programação para computadores. Ele considerou-a uma extensão da álgebra matricial, e usou convenções tipográficas matemáticas comuns como subscritos, superescritos e distinções baseadas no peso ou na fonte dos caracteres. Aqui, por exemplo, é um programa para ordenar números:
Para linearizar a notação para uso como uma linguagem de programação de computador digitada em um teclado, os implementadores APL certamente tiveram que abrir mão do uso de setas etiquetadas para transferências de controle. Mas uma característica que eles foram capazes de reter, até certo ponto, foi o uso de símbolos especiais para funções primitivas, como ilustrado neste programa que cria códigos Huffman:
APL usa símbolos que são mais próximos da matemática padrão do que a programação. Por exemplo, o símbolo para divisão é ÷, não /. Para suportar os símbolos não convencionais, a APL360 usou um teclado personalizado com símbolos especiais em maiúsculas.
APL360 usou um teclado personalizado
Even, portanto, havia mais caracteres especiais do que os que cabiam no teclado, por isso alguns foram digitados com dois caracteres a mais. Por exemplo, o caracter “grade up” ⍋, um operador primitivo usado para ordenação, foi criado digitando ∆ (shift H), depois backspace, depois ∣ (shift M). Não havia espaço para letras maiúsculas e minúsculas, então o APL suportava apenas letras maiúsculas.
Para programas de impressão, Iverson e Falkoff conseguiram que a IBM projetasse uma esfera de tipo especial para seus terminais 1050 e 2741, que usavam o mecanismo de máquina de escrever IBM Selectric.
Agora os programas podiam ser digitados e impressos. Aqui, por exemplo, é a versão impressa um programa do manual 2 da linguagem APL que calcula o determinante matemático de uma matriz:
A Taste of APL
APL é uma linguagem de programação concisa de alto nível que difere da maioria das outras desenvolvidas nos anos 60 em vários aspectos:
Ordem de avaliação: As expressões em APL são avaliadas da direita para a esquerda, e não há hierarquia de precedência de função. Por exemplo, digitando a expressão
2×4+3
causa o computador para digitar imediatamente o valor resultante
O valor não é, como em muitas outras línguas que têm precedência de operador, 11. Naturalmente, parênteses podem ser usados para agrupar uma subexpressão para alterar a ordem de avaliação. A regra geral é que o argumento certo de qualquer função é o valor da expressão à sua direita.
Criação automática de vetores e arrays: Uma estrutura de dimensão superior é criada automaticamente através da avaliação de uma expressão que a retorna, e escalares podem ser livremente misturados. Por exemplo,
A ← 2 + 1 2 3
cria o vetor “1 2 3”, adiciona o escalar 2 a ele, e cria a variável A para manter o vetor cujo valor é
3 4 5
Variáveis nunca são declaradas; elas são criadas automaticamente e assumem o tamanho e a forma de qualquer expressão que lhes seja atribuída.
Uma pletora de primitivas: O APL tem um rico conjunto de funções incorporadas (e “operadores” que são aplicados a funções para produzir diferentes funções) que operam em escalares, vetores, vetores, arrays, até mesmo objetos de dimensões mais elevadas, e combinações deles. Por exemplo, a expressão para somar os números no vetor “A” criado acima é simplesmente
+/A
onde / é o operador de “redução” que faz com que a função à esquerda seja aplicada sucessivamente a todos os elementos do operando à direita. A expressão para calcular a média dos números em A também usa a função primitiva ρ para determinar quantos elementos há em A:
(+/A) ÷ ρA
Aqui estão algumas tabelas do “Manual do Usuário APL360” 3 de 1970 que dão um sabor da potência e da sofisticação das funções e dos operadores APL embutidos. (Clique nas imagens para versões maiores.)
APL encoraja-o a pensar de forma diferente sobre programação, e a usar estruturas temporárias de dados de alta dimensão como valores intermediários que são depois reduzidos usando as poderosas primitivas. Um exemplo famoso é o seguinte programa curto mas completo para calcular todos os números primitivos até R.
(~T∊T∘.×T)/T←1↓⍳R
Aqui está como esta expressão é avaliada:
subexpressão |
significando |
valor se R for 6 |
|||||||||||||||||||||||||
⍳R |
>Gerar um vector de números de 1 a R. |
1 2 3 4 5 6 |
|||||||||||||||||||||||||
T←1↓ |
Deixar o primeiro elemento do vector e atribuir o resto ao vector temporário T. |
2 3 4 5 6 |
|||||||||||||||||||||||||
T∘.×T |
Criar o produto externo de multiplicação: uma tabela que contém o resultado da multiplicação de cada elemento de T por cada elemento de T. |
|
|||||||||||||||||||||||||
T∊ |
Utilizar o operador “set membership” para encontrar quais elementos de T estão na tabela. |
0 1 0 1 |
|||||||||||||||||||||||||
~ |
Negate o resultado para identificar quais os elementos de T que não estão na tabela. Estes são os inteiros que não têm múltiplos na tabela. |
1 1 0 1 0 |
|||||||||||||||||||||||||
( )/T |
Selecionar os elementos de T que identificamos. Estes são todos os primes inferiores a R. |
2 3 5 |
Note que não existem loops neste programa. O poder das expressões APL significa que ramos e loops condicionais são requeridos com muito menos frequência do que em linguagens de programação mais tradicionais.
Os operadores de APL podem ser usados de forma fácil para todos os tipos de cálculos que normalmente requerem loops. Por exemplo, uma expressão que computa o número de elementos do vector X que são maiores que 100 é
+/X>100
Funciona porque X>100 retorna um bit vector de 0’s e 1’s mostrando quais elementos de X são maiores que 100, e +/ adiciona todos os bits nesse vector.
Mas a execução condicional e os loops são, naturalmente, por vezes necessários. À luz de desenvolvimentos posteriores em programação estruturada, a única primitiva APL para transferência de controle, a declaração “GO TO LINE x” →, é particularmente fraca. Aqui está um exemplo de uma função que computa o maior divisor comum dos seus dois argumentos. A última afirmação cria um loop ao ramificar para o início. Na linha 2, a transferência condicional de controle para a linha 0 faz com que a função saia e retorne o último valor atribuído a G.
Para aprender mais sobre a linguagem APL dos anos 60, veja o manual de referência 2 “Linguagem APL” e o “APL360 Primer” de Paul Berry de 1969 4.
A linguagem evoluiu ao longo dos anos, e as versões mais recentes incluem estruturas de controle como IF-THEN-ELSE.
Como o APL foi implementado
A primeira implementação informática da notação APL foi um intérprete de linguagem orientada por lotes escrito em FORTRAN em 1965 para o computador mainframe IBM 7090, por Larry Breed no IBM Research Center em Yorktown Heights NY e Philip Abrams, depois um estudante de pós-graduação na Universidade de Stanford.
A primeira versão interactiva foi escrita pouco depois para o 7093 (um 7090 experimental com memória virtual) por Larry Breed e Roger Moore. Correu sob o sistema de timesharing do TSM e chamava-se “IVSYS”, que rima com “IBSYS”, o nome do sistema operativo standard 7090. Em um e-mail de 2012 a raça diz,
IVSYS forneceu login, logout, execução imediata e definição de funções; forneceu espaços de trabalho, tanto ativos quanto armazenados. A implementação destes foi rudimentar; na maioria das vezes usamos o que o projeto TSM nos ofereceu para login/logout/saving files. Tivemos apenas algumas semanas para usar o 7093 antes que ele fosse desativado e Roger e eu começamos a planejar um sistema autônomo no System/360. Nessas semanas, Ken e seu grupo viram pela primeira vez como seria o APL executável.
Uma outra implementação de um subconjunto da linguagem foi feita em 1967 para o minicomputador IBM 1130.
A primeira implementação de APL a ser amplamente utilizada fora da IBM foi para o IBM System/360. Chamado de “APL360”, entrou em serviço primeiro dentro da IBM em Novembro de 1966. (A notação “APL360″, uma vez que a barra invertida era o operador de “expansão” do APL, também tinha um significado oculto: “APL expande o 360″).
Breed diz da época pouco antes,
Este período, no início de 1966, foi o tempo de transição da Notação Iverson para a APL. (De fato, Adin surgiu com “APL” na primavera de 66.) O refinamento e extensão da linguagem e do ambiente continuou por muitos anos. Não houve quase nenhum código adicionado para fazer uma versão comercial, apenas papelada.
Em agosto de 1968 o APL360 estava disponível para clientes IBM como um programa não suportado (“Tipo III”) na “Biblioteca de Programas Contribuídos” da IBM 5. Os principais implementadores foram Larry Breed, Dick Lathwell, e Roger Moore; outros que contribuíram foram Adin Falkoff e Luther Woodrum.
Early APL developers, da esquerda para a direita: Dick Lathwell, Ken Iverson, Roger Moore, Adin Falkoff, Phil Abrams, Larry Breed. A foto foi tirada por volta de 1983.
Por causa da natureza dinâmica das variáveis APL, o APL360 foi implementado como um interpretador, não como um compilador que gerava código de máquina. Os programas eram armazenados em uma forma interna chamada “codestring” que correspondia diretamente ao que o usuário tinha digitado. O interpretador examinaria então a codificação como o programa executado, e alocaria e reconfiguraria dinamicamente as variáveis à medida que as expressões fossem avaliadas.
As primeiras versões da APL360 assumiam o controle de toda a máquina. Era assim um sistema operacional combinado, sistema de arquivos, monitor de timesharing, intérprete de comando e linguagem de programação. Dada a limitação da memória principal, os espaços de trabalho do usuário eram trocados para o tambor ou disco, conforme necessário. O desempenho foi impressionante, o que Larry Breed atribui, em sua descrição clara e sucinta da implementação 6, à capacidade de adaptar o sistema operacional aos requisitos da linguagem.
APL360 foi uma linguagem de conversação que forneceu resposta rápida e execução eficiente para até 50 usuários simultâneos. Cada usuário tinha um “espaço de trabalho ativo” que continha programas, variáveis e o estado de execução do programa suspenso. Comandos de sistema como “)LOAD”, “)SAVE” e “)COPY” mantinham a biblioteca de espaços de trabalho armazenados pelo usuário. Outros comandos do sistema controlavam recursos de linguagem; por exemplo, com “)ORIGIN” o programador podia controlar se vetores e arrays são numerados começando com 0 ou 1.
APL foi a primeira introdução ao timesharing interativo para muitos na geração de programadores que tinham sofrido através da programação em lote com cartões perfurados.
Aplicações de APL
Even antes de ser uma linguagem de programação de computador, Iverson Notation foi útil como uma linguagem para documentar algoritmos para pessoas. O exemplo clássico é a definição formal da arquitetura do novo computador IBM System/360, que foi publicada num artigo no IBM Systems Journal por Adin Falkoff, Ken Iverson e Ed Sussenguth em 1965 7.
A descrição, que é formal e não verbal, é realizada por um conjunto de programas, interagindo através de variáveis comuns, usadas em conjunto com tabelas auxiliares… Embora a descrição formal seja completa e auto-contida, o texto é fornecido como um auxílio ao estudo inicial.
Mas o texto fornecido no trabalho é muito mais do que isso. É uma explicação linha por linha da descrição formal, o que significa que é também uma demonstração e explicação do poder descritivo do APL.
A notação utilizou o estilo gráfico para transferências de controle que estava no livro de Iverson. Aqui, por exemplo, está a descrição de uma operação de acesso à memória. (Clique para ampliar.)
Foi a transição do APL de uma notação para publicação para uma linguagem de programação interativa de computador que a fez florescer. Quando a implementação da APL360 estava disponível, a IBM e outras estimularam a sua utilização, produzindo diversas aplicações como estas:
- Starmap: Um conjunto de funções APL para calcular e traçar as posições das estrelas e planetas. 8 9 Foi escrito em 1973 por Paul Berry da IBM e John Thorstensen, então estudante de astronomia na faculdade Bryn Mawr, agora Professor de Física e Astronomia na Faculdade de Dartmouth. Utiliza soluções clássicas às equações de Kepler para uma determinada data e hora e uma série de rotações de coordenadas para mostrar onde os planetas e as estrelas apareceriam na tigela do céu.
- IBGS: Simulação interactiva de jogos de negócios: “Uma simulação geral de gestão informática envolvendo tomada de decisões e planeamento nas áreas funcionais de produção, marketing e finanças”
- Zeros e Integrais em APL: “Utilizando tanto métodos clássicos como os de Newton e Muller como métodos recentemente desenvolvidos como os de Jenkins e Traub, encontra zeros reais de uma função real, zeros reais e complexos de um polinómio com coeficientes reais complexos, e zeros complexos de uma função complexa.”
- Graphpak – Pacote Gráfico Interativo para APL360: “…capacidades que variam do suporte de interface gráfica no nível mais baixo até várias áreas de aplicação em níveis mais altos…Um componente de plotagem…linear ou logarítmico…ajuste de curvas… Um componente de geometria descritiva permite definição, escala, ampliação, translação, rotação e exibição projetada de objetos tridimensionais.”
- Gráficos e Histogramas em APL: “produz curvas e barogramas em um terminal de máquina de escrever”.
- Sistema de Geometria de Coordenadas APL: “resolve problemas de geometria de coordenadas interactivamente num terminal…para utilização por topógrafos, engenheiros civis, urbanistas…”
- APL/PDTS – Programming Development Tracking System: “…para ajudar os gerentes e planejadores a monitorar o desempenho em relação ao planejado na programação de projetos de desenvolvimento.” MINIPERT: “A Critical Path Method (CPM) system for Project Management”
- APL Econometric Planning Language: “O economista praticante, o analista de previsões de negócios ou professor é fornecido com ferramentas fáceis de usar para a construção de modelos interativos e resolução de modelos”
- APL Financial Planning System: “permite ao analista financeiro e planejador desenhar relatórios, especificar declarações de cálculo, inserir e alterar dados, e obter relatórios impressos com retorno imediato”
- APL Text Editor e Composer: “Este programa é projetado para processar texto interativamente em um terminal…funções estão incluídas para entrada, revisão, composição, impressão e armazenamento de texto…para uso de secretárias, cientistas, engenheiros, administradores ou quaisquer outros que produzem papéis, cartas, relatórios ou especificações”
Muitas destas aplicações enfatizaram a interatividade, o que proporcionou um enorme aumento de produtividade em comparação com o processamento em lote mais típico na época. Além disso, o APL permitiu que as aplicações fossem desenvolvidas muito mais rapidamente. Em um e-mail de 2012, Larry Breed observou,
Em todos os campos, a velocidade com que os programas APL podem ser escritos o torna valioso para modelagem e prototipagem … Um exemplo: Por volta de 1973, a Continental Can precisava de um sistema de inventário para as suas 21 fábricas. A sua equipa de programadores FORTRAN tinha trabalhado durante um ano, sem sucesso à vista. Um vendedor STSC, num fim-de-semana, construiu um modelo de trabalho utilizável na APL Plus.
As áreas em que o APL teve maior penetração foram em aplicações científicas, actuariais, estatísticas e financeiras. Para detalhes sobre a progressão do APL em seus primeiros 25 anos, veja a edição especial de 1991 do IBM System Journal 10 com 12 artigos e um ensaio sobre o assunto.
APL Praise and Criticism O APL não foi originalmente projetado como uma linguagem de programação. Como Iverson disse,
O motivo inicial para desenvolver o APL foi fornecer uma ferramenta para escrita e ensino. Embora o APL tenha sido explorado principalmente em programação comercial, continuo a acreditar que o seu uso mais importante continua por explorar: como uma notação simples, precisa e executável para o ensino de uma vasta gama de disciplinas.11
Com tantos símbolos ternos e invulgares, os programas de computador APL, como a notação matemática que o inspirou, tem uma concisão e elegância que muitos acham apelativa. O APL atrai adeptos fanáticos. Alan Perlis (o primeiro ganhador do Prêmio Turing ACM, em 1966) foi um:
A varredura do olho através de uma única frase pode expor uma intrincada, engenhosa e bela interação de operação e controle que em outras linguagens de programação é observável apenas em várias páginas de texto. Começa-se a apreciar o surgimento e o significado do estilo. 12
Muita gente encontra a liberdade de expressão em APL liberating.
Eu costumava descrever como uma ‘linguagem de programação fascista’, porque é ditatorialmente rígida. …Se Pascal é fascista, APL é anarquista. 13
Mas os programas APL são muitas vezes crípticos e difíceis de descodificar. Alguns têm brincado que é uma “linguagem somente escrita” porque até mesmo o autor de um programa pode ter dificuldade para entendê-lo mais tarde. Ela inspira truques de programação. O desafio de escrever um “one-liner” APL para implementar um algoritmo complexo completo é difícil de resistir. Aqui, por exemplo, estão dois “one-liners” APL diferentes que implementam versões do “Jogo da Vida” de John Conway:
life←{1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω}
Não para os fracos de coração, claramente. O cientista informático holandês Edsger Dijkstra disse,
APL é um erro, levado à perfeição. É a linguagem do futuro para as técnicas de programação do passado: ela cria uma nova geração de vagabundos codificadores. 14
Mas os fãs de APL diriam que a codificação críptica de APL é um mau estilo de programação que pode ser uma aflição com qualquer linguagem. APL fornece uma paleta mais rica para expressar algoritmos, o argumento vai, assim você pode resolver problemas mais difíceis mais rapidamente e com menos confusão sintática irrelevante.
O que quer que sua visão, APL e as linguagens que ela inspirou, como APL2 e J, ainda são uma parte ativa do universo diversificado de linguagens de programação.
Uma breve biografia de Ken Iverson
Kenneth Eugene Iverson nasceu em 17 de dezembro de 1920 em uma fazenda perto de Camrose, Alberta, Canadá. Ele foi educado em escolas rurais de um quarto até o final da 9ª série, quando abandonou a escola porque era o auge da Depressão e havia trabalho a fazer na fazenda familiar. Mais tarde ele disse que o único propósito de continuar sua escolaridade teria sido tornar-se professor, e essa era uma profissão que ele decididamente não queria. Durante os longos meses de inverno ele estudou cálculo sozinho.
Ele foi redigido em 1942, e durante seu serviço ele fez cursos por correspondência suficientes para quase completar o ensino médio. Após o serviço militar, ele obteve um B.A. em matemática e física pela Queen’s University em Kingston Ontario, e depois um M.A. em física pela Harvard University. Em 1954 ele completou um doutorado sob o comando do pioneiro da computação Howard Aiken, com uma tese intitulada “Machine Solutions of Linear Differential Equations”: Aplicações a um Modelo Econômico Dinâmico”.
Após completar seu doutorado, Iverson juntou-se ao corpo docente de Harvard para ensinar no novo programa de processamento automático de dados do Aiken. Ele esteve lá por um ano como Instrutor, e por cinco anos como Professor Assistente. Ele ficou cada vez mais frustrado com a inadequação da notação matemática convencional para expressar algoritmos, então ele começou a inventar o seu.
Em 1960 Iverson juntou-se ao novo IBM Research Center em Yorktown Heights, Nova York, a conselho de Frederick Brooks, que tinha sido um de seus colegas de ensino em Harvard e agora estava na IBM. Os dois colaboraram para o desenvolvimento contínuo da nova notação. Em 1962 Ken publicou o agora clássico livro “A Programming Language” 1, cujo título deu o nome de APL à notação que até então se chamava informalmente “Iverson’s notation”.
Iverson continuou a trabalhar no desenvolvimento do APL durante todo o seu mandato na IBM. Em 1980 ele deixou a IBM e voltou ao Canadá para trabalhar para I.P. Sharp Associates, que tinha estabelecido um serviço de timesharing baseado em APL.
Em 1987 ele “aposentou-se do emprego remunerado” e voltou toda a sua atenção para o desenvolvimento de um dialeto mais moderno de APL. O APL estava sendo usado com sucesso para fins comerciais, mas Iverson queria desenvolver uma nova notação simples e executável mais adequada para o ensino, a qual estaria disponível a baixo custo. A primeira implementação desta linguagem, chamada J, foi anunciada na Conferência de Usuários da APL90.
A habilidade de Iverson em criar tais linguagens veio de seu “puro prazer de linguagem e palavras”, lembra sua filha Janet Cramer. “Ele lê dicionários como as pessoas lêem romances.” Iverson achou importante que a língua, tanto o inglês quanto a matemática, se comunicasse clara e concisamente.
Com colaboradores que incluíam seu filho Eric, Iverson continuou a trabalhar no desenvolvimento do J, e ele continuou a publicar de forma proliferativa. No sábado, 16 de outubro de 2004, ele sofreu um derrame – enquanto trabalhava em um tutorial de J – e morreu três dias depois, em 19 de outubro, com a idade de 83.
Há muitas histórias sobre Ken Iverson. Aqui estão algumas:
Ken não foi titular em Harvard. Ele cumpriu os seus cinco anos como professor assistente e a Faculdade decidiu não o colocar para promoção. Perguntei-lhe o que correu mal e ele respondeu: “Bem, o Reitor chamou-me e disse: ‘o problema é que não publicou mais nada além de um livrinho'”. O único livrinho depois recebeu o Prêmio Turing. Acho que isso é um comentário sobre a mentalidade convencional dos procedimentos de promoção em vez de um comentário sobre Ken; é um comentário sobre o procedimento acadêmico e sobre Harvard.
– Fred Brooks, A Celebration of Kenneth Iverson, 2004-11-30
Em uma conversa inicial Ken estava explicando as vantagens da comparação tolerante. Um membro da audiência perguntou incredulamente: “Certamente você não quer dizer que quando A=B e B=C, A pode não ser igual a C?”. Sem pular uma batida, Ken respondeu: “Qualquer carpinteiro sabe disso!” e prosseguiu para a próxima pergunta.
– Paul Berry
Numa conversa social com o Ken, eu disse: “Sabes, Ken, tu és o meu designer linguístico favorito e Don Knuth é o meu programador favorito.” E Ken disse imediatamente: “O que há de errado com a minha programação?”
– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30
Em 1973 ou 1974 Ken e eu demos uma palestra na Kodak em Rochester a um grupo de 40 a 50 programadores que eram obrigados a trabalhar no PL/I. No período de perguntas um membro sênior da equipe disse: “Se eu entendo o que vocês estão dizendo, vocês estão sugerindo que devemos adotar uma nova maneira de pensar”. E o Ken saltou da cadeira e disse: “Sim! É exactamente isso que estou a dizer!”
– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30
Acknowledgements
Graças a Michael Karasick, Yvonne Perkins, Steve Selbst, e Ken Edwards da IBM por acabarem com a minha odisseia de dez anos para obterem permissão para libertar o código fonte APL. Obrigado a Curtis Jones, Larry Breed, Paul Berry e Roy Sykes por seus comentários sobre um rascunho antecipado deste artigo.
– Len Shustek
Bibliografia
- K. E. Iverson, A Programming Language, John Wiley and Sons, Inc., 1962.
- IBM, “APL Language”, Março de 1975.
- IBM, “APL360 User’s Manual,” Março 1970.
- IBM, Paul Berry, “APL360 Primer – Student Text,” 1969.
- L. M. Breed e R. H. Lathwell, “APL360,” 1968.
- L. M. Breed e R. H. Lathwell, “The Implementation of APL360,” in ACM Symposium on Experimental Systems for Interactive Applied Mathematics, 1967.
- A. D. Falkoff, K. E. Iverson e E. H. Sussenguth, “A Formal Description of SYSTEM/360,” IBM Systems Journal, vol. 3, no. 3, pp. 198-261, 1964.
- P. C. Berry e J. R. Thorstensen, “Starmap,” 1978.
- P. C. Berry e J. R. Thorstensen, “Starmap,” Divisão de Desenvolvimento de Sistemas IBM, 1975.
- IBM Systems Journal, vol. 30, no. 4, 1991.
- K. E. Iverson, “A Personal View of APL”, IBM Systems Journal, vol. 30, não. 4, 1991.
- A. J. Perlis, “In Praise of APL: A Language for Lyrical Programming”, SIAM News, Junho 1977.
- B. McCormick, “A Programming Language”, 2000,2002.
- E. W. Dijkstra, “How Do We Tell Truth That Might Hurt?”, SIGPLAN Notices, vol. 17, não. 5, Maio 1982.
- A. D. Falkoff e K. E. Iverson, “The Design of APL”, IBM Journal of Research and Development, vol. 17, não. 4, 1973.
- A. D. Falkoff e K. E. Iversion, “The Evolution of APL”, SIGPLAN Notices, vol. 13, no. 8, pp. 45-57, Agosto 1978.
- L. Breed, “How We Got to APL1130”, 10 de Maio de 2004.
- ACM, “Proceedings of the APL’69 Conference on APL”, SUNY Binghamton, NY, 1969.
- “The origins of APL – 1974”; uma maravilhosa entrevista com os desenvolvedores originais da APL.
>
Lançamento do Código Fonte Histórico
- Código Fonte MacPaint e QuickDraw, 18 de julho de 2010
- Código Fonte da Linguagem de Programação APL, 10 de outubro de 2012
- Código Fonte do Adobe Photoshop, 13 de Fevereiro de 2013
- Código Fonte Apple II DOS, 12 de Novembro de 2013
- Código Fonte Inicial do Microsoft MS-DOS, 25 de Março de 2014
- Microsoft Word for Windows Versão 1.1a Código Fonte, 25 de março de 2014
- Código Fonte da Pesquisa Digital Primitiva CP/M, 1 de outubro de 2014
- Código Fonte Xerox Alto, 21 de outubro de 2014
- Código Fonte Primitiva Electronic Arts DeluxePaint, 22 de julho de 2015
>
>
>
>
>
>