Introdução à linguagem de programação Piet
- Piet é uma linguagem de programação para escrever programas que parecem pinturas abstratas
- Recebeu esse nome em homenagem a Piet Mondrian, que foi pioneiro na arte abstrata geométrica
Princípios de design da linguagem Piet
- O código do programa assume a forma de arte abstrata
Cores usadas em Piet
- Piet usa 20 cores distintas
- ciclo de matiz: vermelho -> amarelo -> verde -> ciano -> azul -> magenta -> vermelho
- ciclo de luminosidade: claro -> normal -> escuro -> claro
- Branco e preto não fazem parte desses dois ciclos
- Cores adicionais (laranja, marrom etc.) podem ser usadas, mas o efeito varia conforme a implementação
- No caso mais simples, são tratadas da mesma forma que o branco
Codel
- A unidade básica do código em Piet é o bloco de cor
- É composto por um ou mais codels adjacentes da mesma cor
- Blocos de cor adjacentes apenas na diagonal não são considerados contínuos
- Não há restrição de forma, e eles podem ter "buracos" internos de outras cores
Pilha
- Piet usa uma pilha para armazenar todos os valores de dados
- Os valores de dados existem apenas como inteiros, mas podem ser lidos ou exibidos como valores de caracteres Unicode
- Conceitualmente, a pilha tem profundidade infinita, embora a implementação possa fornecer um tamanho máximo finito
Execução do programa
- O interpretador Piet começa a execução no bloco de cor que contém o codel no canto superior esquerdo do programa
- Ele mantém um ponteiro de direção (DP) e um seletor de codel (CC), movendo-se entre blocos de cor segundo as regras a seguir:
- Encontrar, entre as bordas do bloco de cor atual, a borda mais distante na direção do DP
- Nessa borda, encontrar o codel mais distante na direção do CC
- A partir desse codel, mover-se para o bloco de cor adjacente na direção do DP
- Esse processo se repete até o programa terminar
Elementos da sintaxe
Números
- Cada bloco de cor que não seja preto nem branco representa um inteiro igual ao número de codels daquele bloco
- Só é possível representar valores positivos, mas valores negativos podem ser gerados por operadores
- O interpretador não faz
push automático do número na pilha ao encontrá-lo
Blocos pretos e bordas
- Os blocos pretos e as bordas do programa limitam o fluxo de execução
- Ao tentar mover-se para um bloco preto ou para uma borda, o CC é alternado e o DP gira no sentido horário
- Se ainda não for possível mover-se após 8 tentativas, o programa termina
Blocos brancos
- Os blocos brancos são áreas "livres" pelas quais o interpretador passa sem restrições
- Ele "desliza" pelos codels brancos na direção do DP até alcançar um bloco não branco
- Mesmo ao atravessar um bloco branco e chegar a uma nova cor, nenhum comando é executado
- Se o caminho dentro dos blocos brancos for completamente refeito, o programa termina
Comandos
- São definidos pela mudança de cor quando o interpretador se move de um bloco de cor para outro
- O comando a executar é determinado pelo número de etapas no ciclo de matiz e no ciclo de luminosidade
- Ao atravessar um bloco branco, nenhum comando é executado
- Principais comandos:
- push, pop, add, subtract, multiply, divide, mod, not, greater
- pointer, switch, duplicate, roll
- in(number), in(char), out(number), out(char)
Opinião do GN⁺
- Piet é uma linguagem de programação visualmente atraente, mostrando uma combinação única de arte abstrata e programação
- Porém, em termos de praticidade, parece ter limitações. Escrever programas complexos provavelmente não é algo fácil
- Parece poder ser usada principalmente em experimentos de design de linguagens de programação, puzzles ou criação de obras de arte
- Como linguagens de programação visual, Blockly do Google ou Scratch do MIT podem ser alternativas mais práticas
- De todo modo, Piet parece ser uma linguagem profunda demais, então provavelmente é difícil usá-la no aprendizado de programação para iniciantes
1 comentários
Comentários do Hacker News
O último programa na página de exemplos da linguagem Piet é realmente surpreendente. Uma pessoa (chamada Piet) viu uma obra que lembrava a linguagem Piet e tentou executá-la, e ela realmente funcionou. Foi a primeira vez na história em que um artista gráfico desenhou acidentalmente um programa executável.
Piet é uma experiência revolucionária entre as linguagens de programação esotéricas, mas, a menos que o desenvolvedor faça isso intencionalmente, não atinge bem o objetivo de parecer uma pintura de Mondrian. Seria bom se a própria estrutura da linguagem fosse projetada para que o que fosse escrito se parecesse com uma pintura de Mondrian.
Isso levanta a pergunta: "Como é a aparência de um algoritmo?" Será que algo como o romance O Jogo das Contas de Vidro (Magister Ludi), de Hermann Hesse, poderia ser criado no mundo real? Como alguém com orientação visual, quero acreditar que sim, e de fato tentei usar ferramentas desse tipo, mas respostas ambíguas tornam difícil equilibrar expressividade visual e modularidade.
Coisas desse tipo parecem algo que apareceria em um thriller policial, confundindo os protagonistas/investigadores até que alguém perceba que aquilo é código. E nós achávamos que QR codes eram úteis...
Descobrir Piet é um momento especial de reverência, confusão e maravilhamento. Isso está registrado em uma conversa em um podcast de CS com meu amigo Oz.
Alguém fez um quine em Piet. A imagem está quebrada, mas há uma cópia no CodeGolf.
Na faculdade houve um pequeno curso sobre linguagens de programação esotéricas, e cada um escolhia uma linguagem para brincar. Escolhi Piet, e foi divertido, mas honestamente os pequenos aplicativos de exemplo não eram esteticamente satisfatórios. Para fazer arte com Piet, provavelmente é preciso virar especialista.
Conheci isso na época da universidade e fiquei até tarde da noite escrevendo programas simples; foi uma experiência muito divertida. Recomendo que as pessoas tentem isso pelo menos uma vez!
A página de exemplos é surpreendente. Dá para ver as telas ficando cada vez mais sofisticadas e bonitas.
Muito legal! Fico pensando se seria possível reunir obras em Piet e criar um programa que devolva um texto dado. Algo como um gerador de código Piet. Parece que seria um presente incrível em versão impressa!