INTERCAL
Origem: Wikipédia, a enciclopédia livre.
INTERCAL, uma linguagem de programação paródia, é a linguagem de programação esotérica canônica, criada por Don Woods e James Lyon, dois estudantes da Universidade de Princeton, em 1972. Ela satiriza aspectos das linguagens de programação FORTRAN e COBOL, assim como a proliferação de construtores e notações de linguagem propostos nos anos 1960. Conseqüentemente, o humor pode aparecer um pouco ultrapassado para os programadores modernos acostumados a C ou Java.
A versão atual, C-INTERCAL, é mantida por Eric S. Raymond.
Os autores originais dizem que INTERCAL significa "Compiler Language With No Pronounceable Acronym" (Compilador de Linguagem Sem Acrônimo Pronunciável).
A INTERCAL é propositadamente diferente de todas as outras linguagens de computador. Operações comuns em outras linguagens são realizadas com sintaxe redundade e secreta. Do manual de referência da INTERCAL:
É um fato conhecido e freqüentemente demonstrado o de que a pessoa cujo trabalho é incompreensível é tida com grande admiração. Por exemplo, se alguém estivesse para definir que a maneira mais simples para se armazenar um valor de 65536 em uma variável de 32 bits da INTERCAL é:
DO :1 <- #0¢#256Qualquer programador sensato diria que isto é um absurdo. Já que este certamente é o método mais simples, o programador pareceria bobo em frente ao chefe, que, claro, apareceria por acaso, como os chefes estão acostumados a fazer. O efeito seria não menos devastador para o programador tendo estado certo.
O manual de referência da INTERCAL é um trabalho de humor, contendo várias instruções paradoxais, absurdas ou então humorísticas:
Cuidado! Sob nenhuma circunstância confunda o operador mesh com o interleave, exceto sob circunstâncias confusas!
Ele possui uma "amígdala", como explicado nesta nota de rodapé: "4) Já que todos os outros manuais de referência possuem apêndices, foi decidido que o manual INTERCAL deve conter algum outro tipo de órgão removível."
A INTERCAL possui várias outras características projetadas para fazê-la ainda mais inestéticamente desagradável para o programador: ela usa instruções como "READ OUT", "IGNORE" (ignorar), "FORGET" (esquecer) e "PLEASE" (por favor). O manual da INTERCAL dá nomes incomuns para todos os caracteres ASCII não-alfanuméricos: aspas simples e duplas são "faíscas" e "orelhas de coelho" respectivamente. (A exceção é o ampersand (&): como o define o Arquivo de Jargão, "o que poderia ser mais estúpido?") O operador de atribuição, representado como "meia malha" ou sinal de igual em várias outras linguagens de programação, é na INTERCAL um "<-", referido como "pega" e feito por um "ângulo" e um "verme".
A implementação original de Princeton utilizava cartões perfurados e a codificação de caracteres EBCDIC. A fim de se permitir que a INTERCAL fosse executada em computadores usando ASCII, substituições para dois caracteres foram feitas: ¢ foi substituído por $ como operador mingle para "representar o crescente custo do software em relação ao do hardware", e ∀ foi substituído por ? como o operador unário ou-exclusivo para "expressar corretamente a reação comum de uma pessoa ao encontrar o ou-exclusivo pela primeira vez".
Apesar de ser intencionalmente obtusa e palavrosa, a INTERCAL é contudo Turing completa: dada memória suficiente, a INTERCAL pode resolver qualquer problema que uma máquina de Turing universal pode. Porém, o faz bem lentamente. Um modelo do Crivo de Eratóstenes, computando todos os números primos menores que 65536, foi testado em um Sun SPARCStation-1. Em C, demorou menos de 0,5 segundo. O mesmo programa em INTERCAL demorou mais de dezessete horas. (Stross, 1992)
Deve-se notar que quase nenhuma linguagem de programação permite horrores notacionais tanto quanto ou mais que a INTERCAL, como demonstrado em disputas como o International Obfuscated C Code Contest (Concurso Internacional de Código C Ofuscado). Porém, estes geralmente são esforços intencionais para se criar códigos ilegíveis, em contraste ao projeto da INTERCAL, que força praticamente todo código a ser ilegível.
De acordo com o manual da INTERCAL, "o objetivo ao se projetar a INTERCAL era não ter precedentes", supostamente nem em características de controle de fluxo, nem em operadores de manipulação de dados. Os projetistas foram parcialmente bem-sucedidos; o único precedente conhecido é uma instrução de máquina [1] em um computador mainframe soviético BESM-6, lançado em 1967, que é efetivamente equivalente ao operador SELECT da INTERCAL.
Índice |
[editar] Dialetos
A INTERCAL original era muito limitada pelas suas capacidades de entrada/saída: a única entrada aceita era números, e a única saída era uma versão extendida dos numerais romanos.
A reimplementação C-INTERCAL, estando disponível na internet, tornou a linguagem mais popular entre os devotados a linguagens de programação esotéricas. O dialeto C-INTERCAL possui algumas diferenças em relação ao INTERCAL original e introduziu algumas características novas, como a instrução COME FROM e meios para se realizar operações de E/S com texto baseado no modelo de texto Turing.
Os autores da C-INTERCAL também criaram a variante TriINTERCAL, baseada no sistema ternário e generalizando o conjunto de operadores da INTERCAL.
Uma variante mais recente é a Threaded INTERCAL, que extende a funcionalidade do COME FROM para suportar multitarefa.
[editar] Olá, mundo
O tradicional programa olá mundo demonstra como a INTERCAL é diferente das linguagens de programação padrões. Em C, ele poderia ser lido como:
#include <stdio.h> int main(void) { printf("Ola mundo!\n"); return 0; }
Em outras linguagens pode ser até mais simples, como neste exemplo em PHP:
<?php echo "Olá, mundo!\n"; ?>
O programa equivalente em C-INTERCAL é maior e mais difícil para ler:
PLEASE DO ,1 <- #11 DO ,1 SUB #1 <- #14 DO ,1 SUB #2 <- #188 DO ,1 SUB #3 <- #175 DO ,1 SUB #4 <- #83 DO ,1 SUB #5 <- #48 DO ,1 SUB #6 <- #78 DO ,1 SUB #7 <- #8 DO ,1 SUB #8 <- #56 DO ,1 SUB #9 <- #80 DO ,1 SUB #10 <- #48 DO ,1 SUB #11 <- #114 PLEASE READ OUT ,1 PLEASE GIVE UP
[editar] Ver também
Linguagem de programação esotérica
[editar] Ligações externas
- ((en)) Página da INTERCAL
- ((en)) INTERCAL Resources on the Web inclui várias implementações
- ((en)) INTERCAL Manual de Referência
- ((en)) C-INTERCAL Manual de Referência Suplementar
- ((en)) Threaded Intercal