Piet

Piet  er et esoterisk programmeringssprog udviklet af David Morgan-Mar. Piet-sproget bruger farverige billeder som programmer. Et Piet-program ligner en post-malerisk abstraktion . Piet har fået sit navn fra den hollandske kunstner Piet Mondrian .

Beskrivelse

Programkode på Piet-sproget præsenteres i form af en abstrakt tegning.

#FFC0C0
lys rød
#FFFFC0
lysegul
#C0FFC0
lysegrøn
#C0FFFF
lys cyan
#C0C0FF
lyseblå
#FFC0FF
lys magenta
#FF0000
rød
#FFFF00
gul
#00FF00
grøn
#00FFFF
cyan
#0000FF
blå
#FF00FF
magenta
#C00000
mørkerød
#C0C000
mørkegul
#00C000
mørkegrøn
#00C0C0
mørkeblå
#0000C0
mørkeblå
#C000C0
mørk magenta
#FFFFFF hvid #000000 sort

Sprogbegreber

Farver

Der bruges 20 forskellige farver (tabel til højre). De 18 farver i de første tre rækker i tabellen er forbundet cyklisk med følgende to cyklusser:

Dette indebærer, at lys er mørkere end mørkt, og omvendt. Hvide og sorte farver er ikke inkluderet i cyklerne.

Komplementærfarver kan også bruges, selvom deres effekt er implementeringsafhængig. I det enkleste tilfælde behandles ikke-standardfarver som hvide af sprogtolken (ellers kan de bruges som analoge med sort).

Koder

Piet-kode er en form for grafik, der er samlet ud fra genkendelige farver. Individuelle farvepixel er vigtige i et sprog, så reglen gælder for programmer, der skal forstørres for at vise detaljer. I sådanne forstørrede programmer bruges udtrykket kodel til at beskrive en blok med en farve svarende til én kodepixel, for at undgå forveksling med de faktiske pixels i den forstørrede grafik, som faktisk kan være én kode.

Farveblokke

Hovedelementet i Piet-sproget er farveblokken. En farveblok er en blok af et vilkårligt antal sammenhængende koder af samme farve, afgrænset af blokke af en anden farve eller af kanten af ​​programmets grafik. Farvede blokke, der kun er diagonalt stødende op, betragtes ikke som tilstødende. En farvet blok kan have enhver form og kan have "huller" af andre farver indeni, som ikke er en del af blokken.

Stak

Piet bruger en stak til at gemme alle data. Dataene eksisterer kun som heltal, selvom de kan læses eller udlæses som Unicode-tegn ved de relevante kommandoer.

D.P. CC Udvalgt kode
ret til venstre øverste
ret laveste
langt nede til venstre længst til højre
ret længst til venstre
til venstre til venstre laveste
ret øverste
op til venstre længst til venstre
ret længst til højre

Programudførelse

Piet-sprogfortolkeren begynder at udføre programmet i den farvede blok, der indeholder programmets øverste venstre kode. Tolken indeholder en Direction Pointer (DP), som i første omgang peger mod højre. DP kan pege til højre, venstre, op, ned. Tolken indeholder også en kodevælger (CC), der peger først til venstre. CC kan pege til venstre eller højre. Retningen af ​​DP og CC ændres normalt ofte under programafviklingen.

Under programafviklingen krydser tolken farvede blokke i henhold til følgende regler:

  1. Tolken finder den kant af den aktuelle farveblok, der er længst væk i DP-retningen (denne kant er muligvis ikke direkte forbundet, hvis blokken er en sammensat form)
  2. Tolken finder koden for den aktuelle farveblok ved denne grænse, som er længst i retningen CC fra bevægelsesretningen DP. (se tabellen til højre)
  3. Tolken flytter fra denne kode til farveblokken, der indeholder kodelen, direkte i DP-retningen.

Tolken fortsætter med at udføre disse handlinger, indtil programmet afsluttes.

Syntakselementer

Tal

Hver ikke-sort og ikke-hvid farvet blok i Piet er det heltal, der svarer til antallet af koder i den blok. Bemærk, at negative heltal ikke kan repræsenteres, selvom de kan konstrueres af operatorer. Når tolken koder et tal, behøver den ikke at gøre noget ved det. Især skubber den den ikke automatisk ind på stakken - der er en speciel kommando til dette (se nedenfor).

Sorte blokke og kanter

Sorte blokke og programgrænser begrænser programmets flow. Hvis Piet-programtolken forsøger at bevæge sig ind i en sort blok eller uden for rammerne, stopper den og CC skifter. Dernæst forsøger tolken at flytte fra denne aktuelle blok igen. Hvis det fejler en anden gang, ændres DP i urets retning med 90 grader. Disse forsøg gentages, mens CC og DP skifter mellem alternative forsøg. Hvis tolken efter otte forsøg ikke kan forlade den aktuelle blok, er der ingen udgangssti, og programmet afsluttes.

Hvide blokke

Hvide blokke er frie gennem zoner, som tolken frit springer over. Hvis den bevæger sig fra en farvet blok til et hvidt rum, bevæger tolken sig gennem de hvide koder mod DP, indtil den rammer en ikke-hvid blok. Hvis tolken rammer en sort blok eller kant, anses den for at være afgrænset, ellers flytter den til den farvede blok, den ramte. At flytte gennem en hvid blok til en ny farvet udløser ikke en kommando (se nedenfor). I dette tilfælde kan hvide blokke bruges til at ændre den aktuelle farve uden at udføre kommandoer, hvilket er meget nyttigt til loop-kodning.

Afklaring på hvid blok

Bevægelse langs den hvide blok fører tolken i en lige linje, før den rammer en farvet pixel eller kant. Den bruger ikke proceduren beskrevet ovenfor til at bestemme, hvor tolken vil forlade en ikke-hvid farveblok.

Præcis hvad der sker, når tolken bevæger sig over en hvid blok og rammer en sort blok eller kant, fremgik ikke af den oprindelige specifikation. Fortolkningen følger af en bogstavelig læsning af følgende tekst:

Kommandoer

Ændring af lysstyrke
Farveændring Ikke Mørkere med 1 Mørkere med 2
Ikke skubbe pop
1 trin tilføje trække fra formere sig
2 trin dele mod ikke
3 trin større pointer kontakt
4 trin duplikere rulle i (antal)
5 trin i (char) ud (antal) ud (char)

Kommandoer defineres ved at flytte fra en farvet blok til en anden i overensstemmelse med bevægelsen gennem programmet. Antallet af trin gennem farvecyklussen og luminanscyklussen i hver overgang bestemmer den kommando, der skal udføres, som vist i tabellen til højre. Hvis overgangen er gennem en hvid blok, udføres kommandoen ikke.

Nogle er beskrevet nedenfor.

Handlinger, der ikke kan udføres, ignoreres (eksempel: popning af en ikke-eksisterende værdi fra stakken).

Links