Piet (programozási nyelv)

A Wikipédiából, a szabad enciklopédiából
Ugrás a navigációhoz Ugrás a kereséshez
Piet
Piet Program.gif

Paradigma ezoterikus
Megjelent 1993
Fejlesztő David Morgan-Mar
Hatással volt rá Piet Mondrian
Weboldal

A Piet egy ezoterikus programozási nyelv, ahol a programok absztrakt festménynek tűnnek. Az adatokat stackben tárolja. A programnyelv nevét Piet Mondrianról, a geometrikus absztrakció képviselőjéről kapta. A szerző eredetileg Mondrian-nak szerette volna nevezni, de a név már foglalt volt.

A színek[szerkesztés]

A színkör[szerkesztés]

"Hello World" egy lehetséges megvalósítása Pietben
  • vörös (red)
  • sárga (yellow)
  • zöld (green)
  • cián (cyan)
  • kék (blue)
  • magenta (magenta)
  • vörös (red)

A fekete és fehér nem része a színkörnek. Az egyéb színek használata implementációfüggő, az általános esetben a nem definiált színeket a fordító fehérként veszi figyelembe, tehát bárhol használhatóak, ahol a fehér is.

A fényesség[szerkesztés]

  • fényes (light)
  • normál (normal)
  • sötét (dark)

Színtáblázat[szerkesztés]

black (fekete) #000000
white (fehér) #FFFFFF
light red (világosvörös)

#FFC0C0

light yellow (világossárga)

#FFFFC0

light green (világoszöld)

#C0FFC0

light cyan (világos cián)

#C0FFFF

light blue (világoskék)

#C0C0FF

light magenta (világos magenta)

#FFC0FF

red (vörös)

#FF0000

yellow (sárga)

#FFFF00

green (zöld)

#00FF00

cyan (cián)

#00FFFF

blue (kék)

#0000FF

magenta (magenta)

#FF00FF

dark red (sötétvörös)

#C00000

dark yellow (sötétsárga)

#C0C000

dark green (sötétzöld)

#00C000

dark cyan (sötét cián)

#00C0C0

dark blue (sötétkék)

#0000C0

dark magenta (sötét magenta)

#C000C0

A program[szerkesztés]

A piet program a definiált színekből álló kompozíció. Maga a nyelv nem a blokkokból, hanem az egymást követő blokkok közötti változásból áll elő. Ennek az eredménye, hogy a piet program meglehetősen látványos megjelenésű.

A program végrehajtása tulajdonképpen egy sétának is tekinthető. A végrehajtást két mutató, egy Direction Pointer (azaz haladásjelző, DP) és egy Codel Chooser (blokkválasztó, CC) teszi lehetővé. A haladásjelzőnek négy értéke lehet a négy lehetséges irány szerint (jobbra, le, balra, fel, óramutató járása iránt), a blokkválasztó pedig a két kezet szimbolizálja, így két értéke van (balkéz, jobbkéz).

A színek és a fényesség ciklikus, így összesen 18 utasítás lehetséges. Ebből egy kiesik a változás hiánya miatt, tehát egy piet program 17-féle parancsból állítható össze.

A program alapegysége a codel, ami valójában egy pixelnyi területet jelképez. A program ugyanis pixelenként lép, azonban az egypixelnyi méretek általában nehezen észlehetőek vizuálisan. A másik egység a színblokk, ami az azonos színű codelekből álló összefüggő tartomány. A codelek tehát négyzetes alakúak, a blokkok pedig egymással érintkező (tehát nem átlósan elhelyezkedő) codelekből álló, de tetszőleges alakú tartomány.

A színblokkok maguk egy-egy egész számot jelképeznek, történetesen a blokkot alkotó codelek számát. Így egy piet program ábrája egyszerre tartalmaz konstansokat és utasításokat egy egységbe zárva. Ezeket a blokkokat járja be az interpreter, meghatározott szabályok szerint:

  • A blokk belépési pontjától a DP szerinti legtávolabbi határig haladunk.
  • A határnál a CC szerinti legtávolabbi codelt megkeressük.
  • Az interpreter ennek a codelnek a blokkjába lép a DP irányában.

Ha az interpreter eléri a kép szélét, határát, akkor a CC értékét felcseréljük. Ha így is határba ütközünk, akkor a DP értékét egy negyed fordulattal negatív irányba változtatjuk (azaz az óramutató járásával egyirányban), és természetesen a CC értéke megint cserélődik. Összesen nyolc lépési lehetőség van, ha ennyiből a program nem tud továbblépni, a futásnak vége.

A végrehajtás szempontjából a fekete és fehér blokkok speciális jelentéssel bírnak:

  • A fekete blokk határt jelent a végrehajtás szempontjából. Itt ugyanaz történik, mintha az interpreter a kép szélét érné el, ez programvezérlési eszközként használható.
  • A fehér blokk üres utasítást jelent, az interpreter egyenes áthalad rajta, amíg színblokkba nem lép. Mivel a fehérnek nincs színe, így színváltozás sincs, azaz utasítás végrehajtása nem történik. Ha határhoz ér, akkor mind a CC, mind a DP értékét egy lépéssel változtatja, mindaddig, amíg színes blokkba nem kerül. Ha ennek során visszafelé indul a program nyomvonalán, vagy nem talál színes blokkot, a program véget ér. A fehér blokkok alkalmasak ciklusok szervezésére.

A Piet utasításai[szerkesztés]

Fényesség változása
Szín változása Nincs Eggyel sötétebb Kettővel sötétebb
Nincs push: Az elhagyott blokk értékét a verembe teszi pop: A verem legfelső értékét eldobja
Egy lépés add: Kiveszi a legfelső két értéket a veremből, majd az összegüket visszateszi subtract: Kiveszi a legfelső két értéket a veremből, majd a különbségüket visszateszi multiply: Kiveszi a verem legfelső két értékét a veremből, és a szorzatukat visszateszi
Két lépés divide: Kiveszi a két legfelső értéket, az elsővel elosztja a másodikat, az eredményt (egész) visszateszi a verembe. A nullával osztás eredménye implementációfüggő mod: Kiveszi a két legfelső értéket, a másodiknak képezi az elsővel való osztási maradékát, majd ezt visszateszi a verembe not: A legfelső értéket kiveszi, majd 1-et tesz vissza, ha ez 0, egyébként 1-t
Három lépés greater: Kiveszi a két legfelső értéket, majd 1-et tesz vissza, ha a második nagyobb, egyébként 0-t pointer: Kiveszi a legfelső értéket, majd ennyi negyedfordulatot fordít a DP-n óramutató járása szerint switch: Kiveszi a legfelső értéket, majd ennyiszer cseréli CC értékét
Négy lépés duplicate: A verem tetejére a legfelső elem másolatát teszi roll: Kiveszi a verem két legfelső elemét, majd a második által meghatározott számú további elemet az első által meghatározott számú alkalommal görgeti[1] in (number): Beolvas az STDIN-ről egy egész értéket, és a verem tetejére teszi
Öt lépés in (char): Beolvas az STDIN-ről egy Unicode karaktert, és a verem tetejére teszi out (number): Kiír az STDOUT-ra egy egész értéket a verem tetejéről, majd az értéket eldobja out (char): Kiír az STDOUT-ra egy Unicode karaktert a verem tetejéről, majd az értéket eldobja

A verem[szerkesztés]

A piet minden értéket egész számként veremben (stack) tárol. Az adatok megfelelő utasításokkal karakteres formában (UNICODE) is kiírathatóak. A stack mérete és a túlcsordulás kezelése implementációfüggő. Ennek eredményeképpen a nyelvben nincsen szükség változókra, azokat a verem adatai, a velük végzett műveleteket pedig a veremeljárások helyettesítik.

Jegyzetek[szerkesztés]

  1. Görgetés alatt értendő, hogy az első elemet felvesszük, a többit eggyel előbbre helyezzük, majd a végére illesztjük a kivett elemet.

Források[szerkesztés]

További információk[szerkesztés]

Kapcsolódó szócikkek[szerkesztés]