a diversão (e loucura) das linguagens de programação Esotéricas

uma linguagem de programação esotérica é uma linguagem de programação projetada para desafiar as normas do design de linguagem. Trata-se de uma linguagem concebida para marcar uma posição. O ponto poderia ser qualquer coisa: o Desafio em si de criar algo incomum, fazer uma piada elaborada, criar uma linguagem como uma expressão artística, testar ideias promissoras para a programação, etc.

isto deve deixar claro que não há uma maneira fácil de categorizar ou organizar corretamente todas as diferentes linguagens de programação Esotéricas, uma vez que, por definição, elas desafiam as regras. Mas poderíamos usar alguns conceitos e princípios de organização para obter um melhor senso da Comunidade ao seu redor. Para que pudéssemos entender para que as pessoas as usam, ou para usar essa informação como inspiração para criar sua própria linguagem esotérica.

Algumas Útil Conceitos

Turing tar pitting

Uma Turing tar pitting é uma linguagem de programação que é Turing-completa, mas praticamente inutilizável. Uma linguagem Turing-completa pode simular qualquer máquina de Turing. Em termos práticos, você pode escrever qualquer programa com ele. Então, em teoria, todas essas linguagens são igualmente poderosas, mas as que também são um Turing Tarpit tornam incrivelmente difícil escrever qualquer tipo de programa. Uma maneira comum de fazer isso é reduzir o número de símbolos disponíveis: Tente escrever até mesmo um programa Hello World com apenas 8 caracteres.

Quine

a quine é um programa que produz como saída uma cópia de seu código fonte. O programa não pode ser o programa vazio, mesmo que o programa vazio seja um programa válido na linguagem específica. Ler o código fonte do disco ou memória também é considerado batota. O nome “quine” foi cunhado por Douglas Hofstadter, em seu livro Gödel, Escher, Bach: uma trança dourada Eterna, em homenagem ao filósofo Willard Van Orman Quine. Assim, o conceito de quine não é exclusivo para linguagens de programação Esotéricas, mas, no entanto, é um típico primeiro desafio a ser superado ao escrever uma.

Code Golf

a code golf is a type of competition in which the objective is to write the shortest possible program that implement a certain algorithm. Neste contexto, o menor significa ter o código fonte mais curto. Não significa ter o tamanho menor do código executável binário. Jogar code golf é chamado de “golf scripting”. Há também todos os outros tipos de competições relacionadas com a programação, que, dada a audiência, frequentemente incentivar a fraude criativa. De um modo geral, um desafio é um fator motivador para muitas linguagens de programação Esotéricas.

ofuscação

o conceito de ofuscação, ou seja, esconder o significado real de uma mensagem, obviamente não é exclusivo para linguagens de programação Esotéricas ou mesmo programação em geral. Mas tem uma grande relevância em muitas linguagens de programação Esotéricas. Especialmente se você pretende fazê-lo no sentido geral maior de enganar ou confundir o destinatário. Você não está escondendo a mensagem porque a mensagem em si é importante, mas porque a forma oculta é, em si mesma, o objetivo. Uma maneira típica de conseguir isso é minimizando o número de símbolos da linguagem, mas você também pode camuflar uma linguagem de programação no que parece ser um texto normal ou uma imagem.

Não-Determinismo

neste sentido maior de enganar ou confundir o público, o não-determinismo pode também ser utilizado para alcançar o mesmo objetivo. Uma linguagem não-determinística é aquela para a qual, dado o estado atual de um programa, o próximo estado nem sempre pode ser previsto. O conceito tem algum uso em linguagens de programação normais, essencialmente devido a condições imprevisíveis em tempo de execução. Mas é levado ao extremo por certas linguagens de programação Esotéricas, por variáveis aleatórias ou mesmo aleatorizando as próprias instruções.Como já dissemos, não podemos fornecer uma forma exaustiva de organizar todas as linguagens de programação Esotéricas. E mesmo que alguém pudesse encontrá-la, em breve outra pessoa inventaria uma nova linguagem de programação esotérica só para torná-la inválida. Então o que estamos tentando fazer é simplesmente oferecer alguns grupos, ou categorias, para melhor entender e explorar o mundo das linguagens de programação Esotéricas.

  • línguas com um valor objetivo, embora este valor não seja necessariamente um extrínseco ou típico. Um exemplo básico é uma linguagem projetada para ganhar um code golf competição: seu valor pode ser medido, mas não tem significado fora da comunidade de linguagens de programação Esotéricas. Mas o tipo mais útil são aqueles projetados para alcançar um objetivo incomum, tais como contornar medidas de segurança (ver JSFuck) ou para definir linguagens Tipo-0 da hierarquia de Chomsky (ver Thue).
  • línguas não utilizáveis. Estas são línguas que são muito desafiadoras de usar. Isto pode ser um objetivo explícito do designer ou simplesmente um acidente do próprio design. Um usuário pode até achar divertido usá-los por algum tempo. Uma maneira típica de conseguir uma linguagem inutilizável, tanto por design quanto por acidente, é com o minimalismo (ver Brainfuck). Mas se você quer algo quase impossível de usar você precisa de algo como uma linguagem que usa um sistema ternário e propositadamente auto-alterar-se, entre outras coisas (veja Malbolge).
  • línguas para testar uma ideia ou provar algo. Estas são línguas que podem não ser diretamente úteis, mas são um bom campo de testes para um novo conceito ou para provar algo. Por exemplo, uma linguagem na qual os programas são dispostos em uma grade bidimensional (ver Befunge) ou uma linguagem funcional quase pura (ver Unlambda)
  • linguagens artísticas. Estas são línguas que são projetadas com a idéia de ter algum valor artístico. Você poderia argumentar que eles são efetivamente parte do grupo das línguas de teste ou aqueles com um valor objetivo. Nós os colocamos em uma categoria diferente, porque eles não se parecem com programação, mas eles tendem a parecer interessantes, mesmo se você não quiser usá-los. Por exemplo, eles se parecem com Arte abstrata (ver Piet) ou como uma peça Shakespereana (ver Shakespeare).= = Ligações externas = = * site oficial Estas são línguas inventadas com pessoas com um estranho sentido de humor. Como uma pessoa que diz: “queres ouvir uma piada? – então ele lê guerra e paz, antes de concluir-nossas vidas inteiras são uma piada!”. Um exemplo é uma linguagem satírica, onde até mesmo o manual de referência é uma piada (ver INTERCAL)

Algumas Notáveis Línguas Esotéricas

claro que isso não é uma lista exaustiva, de notável esotérico linguagens de programação, mas, mais modestamente, uma lista de alguns notáveis para o seu sucesso ou peculiaridade.

Befunge

a principal característica esotérica de Befunge é que os programas são dispostos em uma grade bidimensional. É também uma linguagem de pilha baseada e reflexiva, por isso permite que um programa se altere. O objetivo principal era projetar uma linguagem para a qual era tão difícil quanto possível criar um compilador.

a versão original, agora chamada Befunge-93, não é Turing completa, porque coloca um limite de 80×25 para o tamanho da grade. Mas uma nova versão, chamada Befunge-98, remove este limite e deve ser Turing completo. Befunge gerou toda uma classe de linguagens multidimensionais, chamadas Fungeoid.

Befunge tem comandos que controlam a direção para cima, baixo, esquerda, direita e, portanto, também podem criar um ciclo, juntamente com comandos mais tradicionais para saída, operações binárias, etc.

an Hello Word program looks like this.

> vv ,,,,,"Hello"<>48*, vv,,,,,,"World!"<>25*,@

Brainfuck

provavelmente a mais famosa de todas as linguagens de programação Esotéricas, é notável por seu minimalismo extremo. Tanto no número de comandos disponíveis como em ter um compilador muito pequeno. Na verdade, a segunda condição é a razão para a primeira, porque o autor queria criar uma linguagem com o menor compilador possível. O autor criou um compilador que usou apenas 240 bytes. Às vezes, mais tarde, outra pessoa criou um com apenas 100 bytes. Uma consequência natural deste objetivo é que a linguagem é difícil de usar, embora seja Turing completa. Em resumo, é um tarpit de Turing.

é por vezes referido com uma ortografia censurada, como Brainf*ck ou muitas outras variações.

a linguagem consiste em oito comandos diferentes que manipulam um ponteiro de dados e dois fluxos de bytes para entrada e saída. Ele também suporta loops. Outros caracteres, além dos que representam os comandos, são considerados comentários e ignorados pelo compilador.Este é um exemplo de como a linguagem funciona (tirado do wiki Esolangs).

Code: Pseudo code:>> Move the pointer to cell2 Set cell2 to 0 << Move the pointer back to cell0 End while

um programa Hello World se parece com este.

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

se quiser saber mais, pode ver na página correspondente da Wikipédia ou na página Esolangs.

INTERCAL

INTERCAL pode não ter sido a primeira linguagem de programação esotérica, mas é certamente a primeira famosa. Que idade tem? Foi criado em 1972 e a primeira implementação foi feita com cartões perfurados. A linguagem foi concebida como uma paródia, mas também para fazer algo completamente novo, um alienígena para o mundo de programação. O nome não é um acrônimo, de acordo com os autores:

O nome completo do compilador é “Compilador de Linguagem Pronunciável Sigla,” que é, por razões óbvias, abreviado “INTERCAL.”

o resto do manual de referência INTERCAL (formato PS) também está cheio de declarações absurdas ou humorísticas. Isto é tanto pela linguagem que descrevem como pela forma como o fazem. Por exemplo, esta é uma seção sobre variáveis

INTERCAL permite apenas 2 tipos diferentes de variáveis, o inteiro de 16 bits e o inteiro de 32 bits. Estes
são representados por um ponto (. ) ou duas manchas ( : ), respectivamente, seguidas por qualquer número entre 1 e 65535,
inclusive. Estas variáveis podem conter apenas números não negativos; assim, têm as respectivas gamas de valores
: 0 a 65535 e 0 a 4294967295. Notar: .123 e: 123 são duas variáveis distintas. Por outro lado,
.1 e .O 0001 é idêntico. Além disso, este último não pode ser escrito como 1E-3 .

A linguagem também permite o uso de um modificador PLEASE. No entanto, também requer o uso da quantidade adequada desta palavra-chave. Não pode ser utilizado em demasia ou em demasia, ou seja, é preciso mostrar a boa educação. A parte realmente unfunny é que era uma característica não documentada no manual original. Um manual de piadas para um manual de piadas pode ser bom, mas um que está incompleto é inaceitável.

This is an Hello World in a version of INTERCAL implemented with C: C-INTERCAL.Em resumo, INTERCAL é uma piada muito elaborada. O tipo de piada que pode levar-te a admirar o seu Criador pela sua perseverança ou a duvidar da sua sanidade, ou talvez ambos.

JSFuck

o sucesso de Brainfuck são estimulados pela criação de muitas línguas derivadas, muitas para mencioná-las todas. Mas o mais notável é o JSFuck.JSFuck não é uma linguagem adequada, mas é mais um estilo de programação esotérico de Javascript que requer o uso de apenas 6 caracteres. Os programas resultantes são programas JavaScript válidos e na verdade foi inventado para contornar técnicas de segurança como a detecção de malware. Suas propriedades o tornaram também útil para a ofuscação de código.

funciona porque você pode avaliar qualquer expressão em Javascript como qualquer tipo. Então representa e lista vazia, mas ao prepará-la com + você pode forçá-la a avaliar como o número 0. Para obter uma letra como a pode manipular o valor false, etc. O resultado final é uma linguagem extremamente Descritiva: o equivalente a alert("Hello World!") tem 22948 caracteres de comprimento.Malbolge é uma linguagem especificamente projetada para ser quase impossível de usar.:

via uma “operação louca” contra-intuitiva, aritmética base-três, e Código auto-Alterante

nas palavras de seu próprio criador.

na verdade, mesmo o autor nunca escreveu um programa de trabalho com ele. O primeiro programa foi gerado por outro programa que implementou um algoritmo de busca heurística. A linguagem não é Turing completa e também é baseada em um malebolge, o oito círculo do inferno no Inferno de Dante Alighieri. Portanto, realmente não tem nenhuma qualidade redentora.

eu não vou tentar descrevê-lo porque a coisa toda é explicitamente um exercício de frustração. No entanto, há uma notável “operação louca” que vale a pena mencionar: criptografia. A linguagem é suposto trabalhar em uma máquina virtual ternária e tem três registradores, um dos quais contém um ponteiro para a instrução atual e é chamado . Depois que a instrução é executada o módulo 94 do valor em substitui o que está em então o resultado é criptografado de acordo com uma tabela de criptografia. Bem-vindo ao inferno, de facto.Algumas almas corajosas criaram um programa Hello World.Piet é uma língua na qual os programas são representados como pinturas de arte abstratas, no estilo de Piet Mondrian. É baseado em pilha e Turing completo.

existem 18 cores ordenadas de acordo com o tom e brilho, mais preto e branco. Estes dois últimos têm um significado especial e são usados para controlar o fluxo. A execução do programa baseia-se em dois “ponteiros”: um ponteiro de direção e um selector de bloco de cores. O DP pode apontar para cima, para baixo, para a esquerda e para a direita, enquanto o CC pode apenas apontar para a esquerda e para a direita. A combinação destes dois ponteiros governa a execução do programa: basicamente qual bloco de cor é executado a seguir. O tamanho de um bloco de cor representa um inteiro. Quando o programa transição entre diferentes blocos de cor, sua diferença de Tom e brilho determina o tipo de comando que é executado. Os comandos são os habituais, como a saída de um valor, multiplicar, etc.O programa Hello World tem uma certa beleza.

Olá, Mundo em Piet por Thomas Schoch

Shakespeare

Shakespeare é uma linguagem projetada para ter: a “bela do código fonte que se assemelhava peças de Shakespeare”. A linguagem tem poucos comandos e é funcionalmente semelhante à linguagem assembly, mas não surpreende muito.

as variáveis devem ser declaradas em uma seção inicial e seus nomes devem ser personagens shakespearianos válidos, como Romeu ou Julieta. Estas variáveis são pilhas nas quais mais tarde serão executadas operações como pop, push e input/output. O nome dos atos e cenas funciona como etiquetas goto e o destino de certas declarações condicionais. Personagens, ou seja, variáveis, devem ser chamados no palco para serem manipulados e só podem haver duas de cada vez no palco.

as linhas geralmente representam constantes numéricas: alguns substantivos e adjetivos são convertidos em valores numéricos.Palavras especiais, como” lembrar”, ou combinações delas, como” falar sua mente”, executam comandos. Estes são comandos normais, como empurrar os valores no carácter da pilha, sobrepor o valor da variável actual ou o carácter ASCII correspondente.

uma declaração condicional é representada por uma pergunta de um caráter e uma resposta do outro caráter que determina para onde ir, se a condição da pergunta avaliar para verdadeira.O Hello World é tão longo e produtivo quanto uma peça shakespeariana.

The Infamous Hello World Program.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.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! Scene II: The praising of Juliet.Hamlet: Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind! Scene III: The praising of 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! Act II: Behind Hamlet's back. Scene I: Romeo and Juliet's conversation.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! Scene II: Juliet and Ophelia's conversation.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!

Thue

Thue é uma linguagem de programação baseada em um sistema de reescrita de cordas, chamado semi-Thue system. É não-determinístico e segue o paradigma de programação de restrições. O que significa que as variáveis são definidas em termos de restrição (ex. algo é verdadeiro ou falso). É um Turing tarpit.No caso de estes custos serem representados por uma lista de regras de substituição na forma:

<string>::=<replacement>

formatos especiais deste formulário representam entrada, saída ou o fim da lista de regras.

a natureza não-determinística da linguagem pode ser mostrada indicando duas substituições possíveis para a mesma cadeia. Por exemplo:

  • você escrever uma regra que diz que a string a pode ser substituído com stupid
  • você também escrever uma regra que diz que a string a pode ser substituído com you are

Quando um programa é executado cadeia de caracteres a pode ser substituído por qualquer uma das duas opções.

a lista de regras é seguida por uma cadeia que representa o estado inicial.Embora escrever um programa útil possa ser difícil, o típico “Hello World” é bastante fácil e compreensível, pelo menos pelo padrão das linguagens de programação Esotéricas.

a::=~Hello World!::=a

Unlambda

Unlambda é uma (quase) linguagem funcional pura projetada para mostrar uma linguagem puramente funcional (e provavelmente quão impraticável isso seria). Baseia-se na lógica combinatória. É Turing complete e o primeiro Turing tarpit funcional. Ele baseia-se em algumas funções, um operador de Aplicação ` (o caracter backquote) e também suporta entrada/saída. Tecnicamente ele funciona apenas em funções com um único argumento, mas funções multi-argumento podem ser traduzidas em uma sequência de funções.

um programa Hello World quase parece legível.

`r```````````.H.e.l.l.o. .w.o.r.l.di

outras línguas Esotéricas interessantes

Fugue é uma linguagem que usa arquivos MIDI como código fonte. Os intervalos entre cada nota são traduzidos para comandos tradicionais específicos, como entrada/saída ou adição.

Beatnik é uma linguagem baseada em pilha que consiste em uma série de Palavras em inglês; espaços em branco e pontuação são ignorados. As palavras são convertidas em comandos tradicionais de acordo com o seu valor no jogo Scrabble.

o espaço em branco é uma linguagem de piada na qual apenas caracteres em branco, como tabs e espaços, são válidos e qualquer outro carácter é ignorado. Este é, naturalmente, o inverso do comportamento usual dos compiladores que ignoram o espaço em branco. Dada Esta característica, ele pode ser usado em um programa Poliglota, ou seja, um programa que é válido para mais de uma linguagem. Desde que a outra linguagem não seja Python, ou qualquer linguagem onde o espaço em branco seja importante.

GolfScript é uma linguagem de programação concatenativa projetada para ganhar competições de código-golfe, que também é Turing completa.

Floco de neve é uma linguagem auto-modificadora reversível na qual tanto o interpretador quanto o programa são modificados em cada execução.

FRACTRAN é uma linguagem na qual os programas são uma lista de frações e um número inicial. Não sei o que faz, mas faz alguma coisa, já que tem uma página na Wikipédia.

Iota e Jot são duas linguagens formais, cada uma projetada para ser o sistema formal mais simples. Por sua natureza, eles também podem ser considerados igualmente minimalistas, Turing tarpit, linguagens de programação. Ambos usam apenas dois símbolos e realizam duas operações. Um sucessor, chamado Zot, também suporta entrada / saída.

entropia é uma linguagem de programação muito apropriadamente chamada projetada para aceitar a ideia de desistir do controle. Qualquer saída do programa será aproximada e cada vez que os dados são acessados, ele é modificado aleatoriamente. A linguagem não modifica o programa original, então cada vez que é executado a saída será diferente, mas o estado inicial será preservado. Um efeito colateral curioso da aleatorização de dados é a Eliza bêbada, uma versão web do programa Eliza clássico em que o terapeuta parece estar bêbado.Monicelli é uma linguagem de piadas baseada no filme de comédia “My Friends”. Um programa típico parece uma série de frases absurdas italianas. Surpreendentemente, isso faz sentido, uma vez que o filme usado como inspiração também apresentam frases sem sentido. É o círculo da loucura.

resumo

o mundo da linguagem de programação esotérica é tão emocionante quanto é enlouquecedor: não há regras, mas um monte de coisas interessantes. Espero ter-lhe dado uma janela um pouco sà sobre o que poderia esperar.

se você quer saber mais ou participar desta comunidade eu sugiro olhar para Esolangs. Esse site, junto com a Wikipédia, é a fonte da maioria dos exemplos mostrados neste artigo. Lá você também pode encontrar alguma inspiração em uma lista de idéias para uma linguagem de programação esotérica.

você também pode achar interessante o blog de Marc C. Chu-Carroll em suas muitas encarnações durante os anos. Como o nome boa matemática, má Matemática implica, é dedicado principalmente à matemática. No entanto, ele também tem muitas análises de linguagens de programação Esotéricas em uma série chamada programação patológica (linguagem). Você pode ver, por exemplo, um dedicado à menor linguagem de programação.

Deixe uma resposta

O seu endereço de email não será publicado.

Previous post Citrus Wheels secos Caseiros
Next post Sangue e Chocolate (2007)