O objetivo de qualquer linguagem de programação é, ou ao menos deveria ser, permitir que o programador escreva códigos de forma que a implementação tome o menor tempo possível, que seja fácil de ler depois e que não limite a criatividade do programador, sem pesar em termos performance. É claro que tudo isso, seja a linguagem compilada ou interpretada ou os dois, tem que simplesmente rodar como deveria, mesmo nas situações mais inimagináveis. Enfim, não é uma tarefa fácil construir uma linguagem boa.
O curioso é saber que existem linguagens de programação que tem justamente objetivos contrários a esses (como Assembly) são as chamadas linguagens de programação esotéricas. Alguns dizem que elas servem para testar o limite do possível em linguagens de programação, outros dizem que elas servem para introduzir novos conceitos de programação, mas a verdade é que elas são passatempo para h4×0r5 desocupados, ou nem isso.
Através de uma sintaxe bizarra elas conseguem facilmente pirar a cabeça de qualquer um que tente entender o código ou escrever algo sério usando essas linguagens. Elas foram feitas para “fuckar com o seu brain”, como sugere a linguagem brainfuck – sim, esse é o nome dela. Vejamos um programa “Olá mundo!” em brainfuck:
++++++++++[>++++++++>+++++++++++ >---------->+++>++++++++>+++++++ +++++>+++++++++++>++++++++++>+++ ++++++++>+++<<<<<<<<<<-]>-.>--.> ++++.>++.>---.>---.>.>.>+.>+++.>
Hã?
Esta linguagem foi projetada com o objetivo de possuir o menor compilador possível e para isso Urban Müller, seu criador, reduziu o número de caracteres reconhecidos pelo compilador para oito. Existem várias linguagens baseadas em brainfuck e a maioria delas inclui novos caracteres, o que não quer dizer que o código se torne mais legível. Veja o mesmo programa escrito acima, agora em L00P, uma linguagem baseada em brainfuck:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. ---.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++.-------------------------------------------------- -------------------------------------------------------------------------------- -------------------.+++++++++++++++++++++++++++++++++++++++++++++.++++++++.----- --.----------.+++++++++++.----------------------------------------------.&
Entendeu agora?
Por outro lado, uma linguagem de programação esotérica pode ter uma aplicação bem específica. Brainfuck, por exemplo, só possui oito caracteres, o que significa que na melhor das hipóteses só serão necessários três bits para representar cada caractere do programa (dois algarismos na base binária elevado a terceira potência, número de casas, é igual a oito possibilidades de combinações), o que diminui bastante o tamanho do código. Aquele “Olá Mundo!” que ocupava 160 bytes com cada caractere ocupando 8 bits ocuparia apenas 60 bytes após otimizado e com o compilador ocupando até menos de 200 bytes é possível programar usando um espaço de armazenamento limitadíssimo. É muito difícil encontrar uma aplicação prática para brainfuck, mas não dá pra dizer que é completamente inútil.
Outra linguagem bastante curiosa é o Whitespace, que descobri lendo o Nérdson. Esta linguagem, criada por Edwin Brady e Chris Morris, considera somente caracteres em branco como: espaços, tabulações, quebras de linha e linhas em branco. Esta linguagem possui a incrível habilidade de poder estar contida dentro de qualquer código de outra linguagem, porque os caracteres em branco (whitespaces) geralmente não são tão importantes nas outras linguagens de programação. Veja um “Olá Mundo!” em Whitespace:
linha-em-branco_______PS:nada-disto-é-interpretado,lembra? linha-em-branco linha-em-branco linha-em-branco linha-em-branco linha-em-branco linha-em-branco/EOF
Mmmmmmmmm…
Apesar de a primeira vista parecerem inúteis, essas linguagens nos levam a refletir sobre uma questão: a partir de que ponto uma linguagem passa a ser esotérica? Será que o critério é a linguagem em si ou o conhecimento já adquirido com outras linguagens pela pessoa que lê o código? Para uma pessoa leiga no assunto até mesmo um código em Pascal ou BASIC pode ser incompreensível, ou seja, no fundo nenhuma linguagem é esotérica, apenas estão mais distantes ou mais próximas da realidade do programador.
25 Agosto, 2008 às 11:33 |
[...] por Perini (perini104Θhotmail·com) – referência [...]
25 Agosto, 2008 às 12:53 |
Não seria “Linguagens de programação exóticas”?!
25 Agosto, 2008 às 13:21 |
/eof
25 Agosto, 2008 às 13:48 |
[...] a linguagem Brainfuck? E Whitespace? Não? Então leia este post do iCaju sobre linguagens de programação esotéricas. Só para dar uma palhinha, segue um [...]
25 Agosto, 2008 às 14:26 |
Hehehe, faltou a mais engraçada de todas, que é a LOLCode… Segue um exemplo:
HAI
CAN HAS STDIO?
VISIBLE “HAI WORLD!”
KTHXBYE
Basicamente um “Hello World”
25 Agosto, 2008 às 18:49 |
Marcelo, é esotérica mesmo, eu também achei estranha a denominação, mas olhando no dicionário até que faz sentido. Eu também tinha outra idéia a respeito do que seria uma coisa esotérica…
Guilherme, essa também é muito legal, mas eu não quis deixar muito longo o texto.
25 Agosto, 2008 às 18:59 |
http://www.lolmacs.com/wp/?p=7
http://www.flickr.com/photos/snej/531257569/
Definitivamente, LOLcode é a linguagem mais divertida
26 Agosto, 2008 às 16:11 |
Acho que a melhor de todas é uma lingüagem chamada Shakespeare:
http://shakespearelang.sourceforge.net/report/shakespeare/shakespeare.html
27 Agosto, 2008 às 4:00 |
Thiago, O.o essa eu nunca tinha visto. Que horror!
29 Agosto, 2008 às 1:32 |
Esotérico? Difícil? Você ainda não viu isso:
http://www.lscheffer.com/malbolge.shtml
Isso sim está distante de qualquer programador! =)
4 Outubro, 2008 às 17:31 |
Muito bem colocado! Vejo que muitos nem sabem o que é uma linguagem exotérica e no entanto criticaram o artigo. Parabéns pela divulgação do conhecimento.
5 Outubro, 2008 às 17:39 |
Valeu, woodx!
21 Abril, 2009 às 21:29 |
[...] para o nosso blog. Tivemos seis artigos publicados no BR-Linux: a análise do BitLinux 2, o linguagens de programação esotéricas, a polêmica lista do Perini de 5 motivos que o impedem de usar Linux, o tutorial de Geany e [...]