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¢#256
Qualquer 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 Jargon File, "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.

Dialetos[editar | editar código-fonte]

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 estendida 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 estende a funcionalidade do COME FROM para suportar multitarefa.

Olá, mundo[editar | editar código-fonte]

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 Python:

print("Olá Mundo!")

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

Ver também[editar | editar código-fonte]

Linguagem de programação esotérica

Ligações externas[editar | editar código-fonte]