APL/SNOBOL As primeiras linguagens dinâmicas Alunos: Braully Rocha da Silva Bruno Ferreira Machado Ricardo Pulice de Almeida APL • Histórico APL (Array Programming Language ou "A Programming Language") foi uma das primeiras linguagens criadas para processar arrays. Foi criada por Kenneth E. Iverson enquanto ele estudava na Universidade Harvard. A linguagem tinha como nome original "Notação Iverson" e foi criada visando acabar com as ambigüidades e com as confusões das notações matemáticas. No fim dos anos 60, graças aos esforços da IBM, a comunidade científica teve conhecimento da APL. APL é uma notação orientada a usuários, facilitando a comunicação de pessoas com pessoas e/ou computadores. A notação usa símbolos como letras, números, formas especiais e álgebra com uma sintaxe bastante simples para unir esses símbolos e processar dados. Os dados podem tanto ser números ou textos. A linguagem é formada de inúmeros "dialetos" diferentes. • Mais sobre a linguagem: APL é caracterizada por verificação dinâmica de tipos e alocação dinâmica de memória. Foi projetada como uma linguagem de descrição de hardware ( IBM por Ken Iverson) e é altamente expressiva ( muitos operadores tanto para escalares quanto para arrays de muitas dimensões). A linguagem foi criada pensando-se em comunicação de procedimentos matemáticos. É uma linguagem simples de aprender e simples de usar, pois foi criada para ser assim. APL é uma linguagem concisa: o que você faz em muitas e muitas linhas usando Basic ou Fortran, por exemplo, pode fazer em pouquíssimas, ou até em somente uma, linha em APL. Por ser uma linguagem muito concisa e ter muitos símbolos que representam diferentes funções, APL é uma linguagem difícil de ser lida. Muitas vezes o próprio implementador não consegue entender muito bem o que ele mesmo escreveu. Isso é um grande problema da linguagem, pois restringe o seu uso àqueles que gastam um bom tempo tentando entendê-la. • Exemplo de código para imprimir "Hello you." na saída-padrão: Simplesmente: 'Hello you.' basta, mas também pode ser feito da seguinte forma: a <- 'Hello you.' 'a' • Compiladores / Interpretadores Interpretador para DOS: http://burks.bton.ac.uk/burks/software/langs/install.sw? 2.freeapl.zip#2.freeapl.zip Interpretador para Windows: http://burks.bton.ac.uk/burks/software/langs/install.sw? 2.j406a.exe#2.j406a.exe Compilador: http://web.engr.oregonstate.edu/~budd/Books/aplc/apl c.tar.Z • Documentações: Manuais de APL360 e APL1130: http://www.classiccmp.org/bitsavers/pdf/ibm/apl/ Exemplo APL Outro exemplo APL Teclado APL SNOBOL • Histórico A primeira linguagem SNOBOL (StriNg Oriented and symBOlic Language) criada foi desenvolvida por David J. Farber, Ralph E. Griswold e Ivan P. Polonsky nos Laboratórios Bell, em 1962. SNOBOL foi uma das primeiras linguagens criadas para processamentos de listas. Era usada originalmente para processamento de textos e desenvolvimento de compiladores. Uma das primeiras opções de nome para a linguagem foi SEXI (String EXtraction Interpreter). O nome SNOBOL foi escolhido, segundo dizem, porque um dos implementadores originais disse algo como "This program doesn't have a snowball's chance in hell of succeding." (algo como "esse programa tem a mesma chance de fazer sucesso como uma bola de neve no inferno"). O sistema SNOBOL original foi escrito no assembler BEFAP (Bell Laboratories FORTRAN assembly program, na sigla em inglês) para o IBM 7090. O maior defeito da linguagem foi a falta de funções embutidas nela. Uma nova versões, com processos embutidos, foi lançada em 1964, o SNOBOL2. Funções definidas pelo programador foram implementadas no SNOBOL3 (1965). Os trabalhos no SNOBOL4 começaram em 1966 e ele trouxe de novo: padrões melhorados, tipos de dados numéricos, arrays, estruturas e tabelas. O SNOBOL4 é usado até hoje. O SNOBOL4 tem duas implementações mais conhecidas: uma é vanilla SNOBOL4 (32-bits) e a outra é a spitbol 360 (16-bits). As documentações de ambas encontram-se nas Referências Bibliográficas. • Mais sobre a linguagem: Vantagens de Snobol4: variáveis são dinamicamente tipadas, ou seja, o tipo de uma variável é definido pelo último valor que ela recebeu. Snobol4 na verdade só usa definições de tipos de variáveis em variáveis locais de procedimentos. Os operadores e funções nativas da linguagem checam os tipos de seus argumentos e esses são convertidos para tipos apropriados. Se essa conversão não for possível, uma mensagem de erro será exibida na tela. Snobol não possui nenhum mecanismo explícito para devolver memória ao sistema. Isso deve ser previsto pela implementação do código. Isso torna a linguagem mais complexa de ser implementada mas mais fácil de ser usada. Snobol4, em geral, tem muitas facilidades para diagnóstico de erros em tempo de execução. A linguagem permite uma depuração eficiente e "armadilhas" para capturar praticamente todos os erros em run-time. Desvantagens de Snobol4: espaços em branco fazem a diferença no código. Isso atrapalha muito na implementação do programa. Snobol também não possui operadores de comparação. Todas as comparações são feitas por funções que retornam "null" se a condição for verdadeira e retorna um fail se for falsa. Em Snobol a única estrutura de controle, tecnicamente, é a "go to". Escrever um programa em Snobol exige constantes invenções para nomes de rótulos, e nomes que facilitem a compreensão de quem ler o código. Mas geralmente isso não ocorre. • Exemplo de código para imprimir "Hello you." na saída-padrão: OUTPUT = 'Hello you.' END • Compiladores / Interpretadores Podem ser encontrados compiladores em: http://www.idiom.com/freecompilers/LANG/Snobol4-1.html Compilador e interpretador de SNOBOL4+: ftp://ftp.snobol4.com/snobol4p.zip • Documentações: Documentação do SNOBOL4: http://public.planetmirror.com/pub/snobol/snocone/doc / Documentação de Vanilla Snobol: http://burks.bton.ac.uk/burks/language/snobol/catspaw /manual/contents.htm Documentação de Spitbol: http://www.snobol4.com/spitbol360/ Exemplos SNOBOL