Linguagens de programação esotéricas

Fotografia de Marina Pinho
Escrito por

Marina Pinho

Communication Manager

Já alguma vez pensaste como seria criares a tua própria linguagem de programação? Pois bem, se essa ideia já te passou pela cabeça, não foste o único. Num cantinho da Internet, existe toda uma comunidade online que se dedica, não só a criar linguagens de programação e a desenvolver programas com as mesmas, como também a debater as suas propriedades. 

As linguagens de programação esotéricas ou esolangs são essencialmente linguagens criadas com um intuito experimental, ou seja, criar algo novo, muitas vezes estranho e fora da caixa, que seja difícil de programar. Importa referir que o seu objetivo principal não passa pelo seu uso prático, mas sim pela expressão criativa ou pelo desafio. Por exemplo, a primeira a existir, a “Compiler Language With No Pronounceable Acronym” (INTERCAL), foi desenvolvida por Donald Woods e James Lyon, em 1972, com o intuito de satirizar alguns aspectos das linguagens que existiam na época. Desde então já muitas outras se seguiram.

Turing completeness

Alan Turing foi um matemático inglês responsável pelo desenvolvimento da teoria computacional e pela criação da máquina de Turing. Esta é um modelo de uma máquina de estados finitos que, sendo simples e genérico o suficiente, poderia servir de base a qualquer programa de computador. O exemplo mais comum da máquina de Turing é uma máquina de fita com inputs e outputs. Ora, se uma máquina física, como um computador, ou até virtual, como é o caso de uma simulação em software, estiver de acordo com o modelo da máquina de Turing, podemos considerá-la Turing-complete. Este conceito é utilizado, assim, como forma de demonstrar o poder de um conjunto de regras sobre manipulação de dados (como é o caso das linguagens de programação).  

Uma calculadora é um exemplo de uma máquina que não cumpre estes requisitos, pois apenas tem a capacidade de desempenhar um conjunto pré-determinado de cálculos. Já os nossos computadores habituais passam neste teste,  pois são capazes de realizar todos os cálculos que uma máquina de Turing conseguiria, desde que tenham tempo e memória suficientes

O interessante sobre as linguagens esotéricas, é que muitas delas passam neste teste, no entanto, acabam por falhar na construção de programas como os que conhecemos já que o conceito de Turing-completeness não implica necessariamente a existência da capacidade de produzir inputsou outputs.

Quando uma linguagem de programação consegue implementar qualquer máquina de Turing, diz-se que é Turing-complete. O Game of Life surge como uma forma acessível de conseguirmos testar uma linguagem neste conceito,  já que este é um exemplo que possui um significado e um conjunto de regras simples de compreender e que requer que todos os requisitos da definição de Turing sejam cumpridos. 

O Game of Life de Conway consiste numa simulação ao longo do tempo de uma cultura de células numa matriz, com um conjunto de regras:

  • Qualquer célula viva com menos de duas células vizinhas vivas morrerá, porque o ambiente é hostil. 

  • Qualquer célula viva com dois ou três vizinhos vivos, manter-se-á viva na próxima mudança de estado.  

  • Qualquer célula viva com mais de três vizinhos vivos morrerá, por escassez de recursos.

  • Qualquer célula morta com exatamente três vizinhos vivos, torna a viver por divisão celular. 

Quando cumprem os requisitos para serem Turing-complete, as linguagens de programação acabam por ser chamadas de Turing tarpit. Muitos programadores procuram ainda explorar formas novas de desenvolver uma linguagem que ofereça uma alternativa às que já existem. Na verdade, as linguagens esotéricas podem ser criadas com vários propósitos em mente. Algumas das mais populares são criadas com o intuito de terem o menor número de instruções possível, sendo assim minimalistas. Por outro lado, existem ainda aqueles cujo único objetivo é criar linguagens estranhas e difíceis ou até que sirvam como piada. Por fim, há ainda o caso de o seu código ter uma representação que de alguma forma expressa a criatividade do autor (ex. Piet).

Apresentamos alguns exemplos deste tipo de linguagens:

Brainf*ck

 É uma das mais famosas e das que mais serve de inspiração para outras esolangs. Apesar da sua popularidade, o seu nome sugestivo torna difícil a disseminação de informação online, pois é muitas vezes censurada. O principal objetivo do seu criador era ter uma linguagem minimalista e, por isso, esta conta com um número limitado de comandos e com um compilador bastante pequeno (240 bytes). Esta consiste em oito comandos diferentes que manipulam ponteiros de memória e streams de bytes (inputs e outputs), controlando ainda ciclos/loops

O Hello World:

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

Shakespeare Programming Language (SPL)

Quem nunca se deparou com uma obra literária tão boa que sente que toda a gente a deveria ler? Pois bem, Karl Wiberg e Jon Åslund, certamente com isto em mente (e não o facto de se quererem divertir ao desenvolverem a sua própria esolang baseada em insultos shakespearianos), decidiram criar uma linguagem em que o código se parece com as peças de Shakespeare

Na SPL, existem variáveis, que são representadas por uma lista de personagens no início do programa, com nomes como Romeu e Julieta, que podem entrar em diálogos umas com as outras ou até colocar questões entre si (agindo como declarações condicionais). Se quisermos dar a uma personagem um valor negativo, por exemplo ao Romeu, basta que o coloquemos no palco e que deixemos que outra personagem o insulte. Podemos, ainda, ter inputs ou outputs se colocarmos uma personagem a dizer a outra para “ouvir o seu coração” e “dizer o que pensa”. 

O Hello World:

Romeo, a young man with a remarkable patience. Juliet, a likewise young woman of remarkable grace. Ophelia, a remarkable woman much in dispute with Hamlet. Hamlet, the flatterer of Andersen Insulting A/S. Act I: Hamlet's insults and flattery. Scene I: The insulting of Romeo. [Enter Hamlet and Romeo] Hamlet: You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself! Speak your mind! You are as brave as the sum of your fat little stuffed misused dusty old rotten codpiece and a beautiful fair warm peaceful sunny summer's day. You are as healthy as the difference between the sum of the sweetest reddest rose and my father and yourself! Speak your mind! You are as cowardly as the sum of yourself and the difference between a big mighty proud kingdom and a horse. Speak your mind. Speak your mind! [Exit Romeo] Scene II: The praising of Juliet. [Enter Juliet] Hamlet: Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind! [Exit Juliet] Scene III: The praising of Ophelia. [Enter Ophelia] Hamlet: Thou art as lovely as the product of a large rural town and my amazing bottomless embroidered purse. Speak thy mind! Thou art as loving as the product of the bluest clearest sweetest sky and the sum of a squirrel and a white horse. Thou art as beautiful as the difference between Juliet and thyself. Speak thy mind! [Exeunt Ophelia and Hamlet] Act II: Behind Hamlet's back. Scene I: Romeo and Juliet's conversation. [Enter Romeo and Juliet] Romeo: Speak your mind. You are as worried as the sum of yourself and the difference between my small smooth hamster and my nose. Speak your mind! Juliet: Speak YOUR mind! You are as bad as Hamlet! You are as small as the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece. Speak your mind! [Exit Romeo] Scene II: Juliet and Ophelia's conversation. [Enter Ophelia] Juliet: Thou art as good as the quotient between Romeo and the sum of a small furry animal and a leech. Speak your mind! Ophelia: Thou art as disgusting as the quotient between Romeo and twice the difference between a mistletoe and an oozing infected blister! Speak your mind! [Exeunt]

Whitespace 

Esta é um exemplo de uma linguagem cujo objetivo é servir de piada. Foi lançada em 2003, no dia das mentiras, por Edwin Brady e Chris Morris. Nesta, só caracteres como tabs e espaços é que são considerados válidos, tudo o resto é ignorado, em oposição ao que normalmente acontece nas linguagens tradicionais. Tendo em conta o número de caracteres que a representam, é uma linguagem essencialmente binária, pelo que tudo nesta linguagem é representado por combinações de espaços agrupados (muito à semelhança da linguagem máquina). 

O Hello World
Whitespace

Piet 

O amor pela arte não se cinge só à literatura. David Morgan-Mar (criador de nove linguagens esotéricas no total) decidiu expressar a sua criatividade e prestar homenagem ao artista Piet Mondrian, através desta esolang. Nesta linguagem, que é Turing-complete, os programas são representados por pinturas abstratas

É composta por 20 cores ordenadas de acordo com matiz e brilho. O preto e branco têm um significado próprio, assumindo a função de controlo de flow. Possui dois “pointers”, cujas combinações controlam a execução do programa - o Direction Pointer (DP) e o Color Block Chooser (CC). O primeiro é o que permite mover o programa para que este corra nas quatro direções cardinais, sendo que o segundo pointer apenas permite que se mova para a esquerda ou direita. Quando um programa transita entre blocos, as diferenças em matiz e brilho são o que determina a instrução a ser executada.

Ciclo de matiz: vermelho -> amarelo -> verde -> ciano -> azul -> magenta -> vermelho

Ciclo de brilho: claro -> normal -> escuro -> claro

piet hello world
O Hello World

TrumpScript (make Python great again)

A TrumpScript surge como o último elemento que faltava ao império do famoso ex-presidente dos Estados Unidos, Donald Trump. Com esta linguagem, os seus criadores esperam tornar a programação great again

Construída em menos de 24 horas por uma equipa de alunos que participavam numa Hackathon, nem todas as suas features se encontram funcionais ainda, mas tem sido alvo de várias melhorias após ter sido publicada no GitHub. Apesar de ser baseada em Python, para conseguir utilizar a linguagem é necessário escrever com recurso a palavras pré-aprovadas e apenas alguns operadores. Em vez de “true” (verdadeiro) ou “false” (falso) é necessário utilizar “fact” (facto) ou “lie” (mentira) e as mensagens de erro apenas irão criticar o código em vez de ajudarem a encontrar o bug

Alguns exemplos de features

  • Não há números decimais, apenas inteiros, pois a América não faz nada pela metade. 

  • Todos os números devem ser maiores que 1 milhão. 

  • Todos os programas devem terminar com “America is great”.

  • Os programas recusam-se a correr em plataformas da Apple até esta fornecer um

    backdoor para os seus produtos ao Governo Americano. 

What are we in this country Hillary speaks nothing but lies But look at me I came to this election to make guys believe again believe in fact if, all of us real lies the light; : say "VOTE TRUMP" ! but I know we should be free else the result will be bad: all the work of George Washington was for nothing so this election say "Hello World" say "TRUMP FOR PRESIDENT"! America is great.

ArnoldC

Ainda no tema das linguagens inspiradas por figuras públicas norte-americanas, temos aquela que se baseia em frases de Arnold Schwarzenegger e que foi criada por Lauri Hartikka com o intuito de explorar novos significados dos filmes do ator com recurso à computação. ArnoldC é uma linguagem imperativa onde os comandos são compostos por frases que a estrela de Hollywood popularizou ao longo da sua carreira em filmes como o Terminator, Total Recall, etc. 

O Hello World:

IT'S SHOWTIME TALK TO THE HAND "hello world" YOU HAVE BEEN TERMINATED

Estas são apenas algumas das linguagens esotéricas que existem atualmente e que demonstram a criatividade que existe dentro do mundo da programação. Apesar da maior parte delas não ter uma aplicabilidade mais concreta, não deixam de ser interessantes para quem vive no mundo da programação. São a prova de que, quer seja para satirizar ou apenas para construir algo que ainda não existe e que ninguém pensou, as linguagens podem servir também de escape criativo.

Descobre ainda mais conteúdos sobre carreira e tecnologia no nosso podcast: