Piet

Piet
«Hello World» на языке Piet

Piet — эзотерический язык программирования разработанный Давидом Морган-Маром. Язык Piet использует разноцветные изображения в качестве программ. Программа на Piet выглядит как постживописная абстракция. Piet получил своё название от имени нидерландского художника Пита Мондриана.

Содержание

Описание

Программный код в языке Piet представлен в форме абстрактного рисунка.

#FFC0C0
light red
#FFFFC0
light yellow
#C0FFC0
light green
#C0FFFF
light cyan
#C0C0FF
light blue
#FFC0FF
light magenta
#FF0000
red
#FFFF00
yellow
#00FF00
green
#00FFFF
cyan
#0000FF
blue
#FF00FF
magenta
#C00000
dark red
#C0C000
dark yellow
#00C000
dark green
#00C0C0
dark cyan
#0000C0
dark blue
#C000C0
dark magenta
#FFFFFF white #000000 black

Концепции языка

Цвета

Используется 20 различных цветов (таблица справа). 18 цветов первых трёх строк в таблице связаны циклически двумя следующими циклами:

  • Цикл оттенков: красный → жёлтый → зелёный → голубой → синий → фиолетовый → красный
  • Цикл яркости: светлый → нормальный → тёмный → светлый

При этом подразумевается, что светлый темнее чем тёмный, и наоборот. Белый и чёрный цвета не входят в циклы.

Дополнительные цвета также могут использоваться, хотя их эффект зависит от реализации. В простейшем случае, нестандартные цвета рассматриваются интерпретатором языка как белый. (в другом случае они могут использоваться как аналогичный чёрному)

Коделы

Код на языке Piet представляет собой форму графики собранной из распознаваемых цветов. Отдельные цветные пикселы важны в языке, поэтому правило распространяется на программы подлежащие увеличению, для того чтобы стали видны детали. В таких увеличенных программах термин Кодел используется для описания блока с цветом, эквиалентного одному пикселу кода, для того чтобы избежать путаницы с фактическими пикселами увеличенной графики, которые в действительности могут быть одним коделом.

Цветные блоки

Основной элемент языка Piet — цветной блок. Цветной блок — это блок любого числа смежных коделов одного цвета, ограниченных блоками другого цвета, либо краем графики программы. Цветные блоки смежные только диагонально не считаются смежными. Цветной блок может быть любой формы и может иметь «дыры» других цветов внутри, которые не являются частью блока.

Стек

Пиет использует стек для хранения всех данных. Данные существуют только как целые числа, хотя они могут быть прочитаны или выведены как символы Юникода соответствующими командами.

DP CC Выбранный кодел
вправо влево самый верхний
вправо самый нижний
вниз влево самый правый
вправо самый левый
влево влево самый нижний
вправо самый верхний
вверх влево самый левый
вправо самый правый

Исполнение программы

Интерпретатор языка Piet начинает выполнять программу в цветном блоке, который содержит верхний левый кодел программы. Интерпретатор содержит Указатель Направления Direction Pointer (DP), который вначале указывает вправо. DP может указывать вправо, влево, вверх, вниз. Интерпретатор также содержит «Выбирающего Коделы» Codel Chooser (CC), вначале указывающего влево. CC может указывать влево или вправо. Направления DP и CC обычно часто меняются во время выполнения программы.

Во время выполнения программы интерпретатор пересекает цветные блоки по следующим правилам:

  1. Интерпретатор находит край текущего цветного блока, который является наиболее отдалённым в направлении DP (этот край может быть не соединён напрямую, если блок составной формы)
  2. Интерпретатор находит кодел текущего цветного блока на этой границе, который наиболее отдалён в направлении СС от направления DP передвижения. (смотри таблицу справа)
  3. Инерпретатор перемещается от этого кодела в цветной блок, который содержит Кодел стоящий непосредственно по направлению DP

Интерпретатор продолжает выполнять эти действия, пока программа не завершится.

Элементы синтаксиса

Числа

Каждый не чёрный и не белый цветной блок в языке Piet представляет собой целый эквивалент числу коделов в данном блоке. Заметьте что отрицательные целые числа не могут быть представлены, хотя они могут быть построены операторами. Когда интерпретатор кодирует число, не обязательно делать что-либо с ним. В частности, он не помещает его в стек автоматически — есть специальная команда для этого (смотри ниже)

Черные блоки и границы

Чёрные блоки и границы программы ограничивают течение программы. Если интерпретатор программы Piet пытается двигаться в чёрный блок или за границу, он останавливается и CC переключается. Далее интерпретатор пытается перемещаться с этого текущего блока снова. Если не удаётся во второй раз, DP изменяется в соответствии с направлением движения часовой стрелки на (на 90 градусов). Эти попытки повторяются, в то время как CC и DP изменяются между чередующимися попытками. Если после восьми попыток интерпретатор не сможет покинуть текущий блок, не существует пути выхода и программа завершается.

Белые блоки

Белые блоки — свободные сквозные зоны которые интерпретатор пропускает беспрепятственно. Если он передвигается из цветного блока в белое пространство, интерпретатор двигается через белые коделы в направлении DP пока не наткнется на не белый блок. Если интерпретатор наткнется на чёрный блок или границу, он считается ограниченным, иначе он двигается в цветной блок, на который наткнулся. Передвижение сквозь белый блок в новый цветной не вызывает выполнение команды (смотри ниже). В этом случае, белые блоки могут использоваться для изменения текущего цвета без выполнения команд, что очень полезно для кодирования циклов.

Уточнение относительно белого блока

Передвижение по белому блоку ведет интерпретатор по прямой линии до того, как он наткнется на цветной пиксел или границу. Он не использует процедуру описанную выше для определения того где интерпретатор выйдет из не белого цветного блока.

Точнее что произойдет, когда интерпретатор передвигается по белому блоку и натыкается на чёрный блок или границу не было ясно по оригинальной спецификации. Интерпретация следует из буквального чтения следующего текста:

  • Интерпретатор двигается через белый блок по прямой.
  • Если он натыкается на преграду, СС переключается. Так как это не приводит ни к какому различию в том, куда интерпретатор пытается перемещаться, направление DP немедленно поворачивается по часовой стрелке.
  • Теперь интерпретатор начинает двигаться с текущего белого кодела в номом направлении DP, пока не войдет в цветной блок или не наткнется на новое препятствие.
  • Каждый раз когда интерпретатор натыкается на преграду в белом блоке, он разворачивает CC и меняет DP в соответствии с направлением движения часовой стрелки, далее пытается двигаться снова. Этот процесс повторяется пока интерпретатор не войдет в цветной блок (пока продолжается выполнение), или интерпретатор начнёт повторять этот маршрут. Если он повторит свой маршрут в белом блоке, не существует пути выхода из белого блока и выполнение должно прекратиться.
Смена яркости
Смена оттенка Нет Темнее на 1 Темнее на 2
Нет push pop
1 шаг add subtract multiply
2 шага divide mod not
3 шага greater pointer switch
4 шага duplicate roll in(number)
5 шагов in(char) out(number) out(char)

Команды

Команды определены переходом из одного цветного блока в другой в соответствии с перемещением по программе. Число шагов по циклу цветов и циклу яркости в каждом переходе определяет выполняемую команду, как показано на таблице справа. Если переход осуществляется через белый блок, команда не выполняется.

Отдельные описаны ниже.

  • push Помещает значение только что покинутого цветного блока в стек. Заметьте, что значение цветного блока не помещается в стек автоматически — эта операция должна быть явно выполнена.
  • pop Извлекает верхнее значение из стека, удаляя его.
  • add Извлекает два верхних значения из стека, складывает их и помещает результат обратно в стек.
  • subtract Извлекает два верхних значения из стека, вычитает верхнее значение из второго, и помещает результат обратно в стек.
  • multiply Извлекает два верхних значения из стека, умножает их и помещает результат обратно в стек.
  • divide Извлекает два верхних значения из стека, вычисляет целочисленное деление второго значения на верхнее и помещает результат обратно в стек.
  • mod Извлекает два верхних значения из стека, находит остаток от деления второго числа на первое и помещает результат обратно в стек.
  • not Заменяет стековое значение на ноль, если оно не нулевое, и на 1 если оно нулевое.
  • greater Извлекает два значения и помещает 1 если второе значение больше первого, 0 если не больше.
  • pointer извлекает значение и поворачивает по часовой стрелке DP на данное число, против часовой стрелки, если число отрицательное.
  • switch переключает CC требуемое число раз
  • roll извлекает два значения из стека (n — верхнее, m — второе) и помещает верхнее значение стека на глубину m n раз. вращение может быть обратным n отрицательное, глубина не может быть отрицательным числом.
  • in Читает число или символ в зависимости от того, что вы подразумеваете этой командой и помещает значение в стек.
  • out выводит число или символ.

Невыполнимые операции игнорируются (извлечение из стека несуществующего значения)

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Piet" в других словарях:

  • Piet — Programm mit Ausgabe Piet „Hallo Welt“ Programm in Piet Piet ist eine esoterische Programmiersprache, bei der der Programmcode wie ein abstraktes Bil …   Deutsch Wikipedia

  • Piet — Pi et (p[imac] [e^]t), n. [Dim. of {Pie} a magpie: cf. F. piette a smew.] (Zo[ o]l.) (a) The dipper, or water ouzel. [Scot.] (b) The magpie. [Prov.Eng.] [1913 Webster] {Jay piet} (Zo[ o]l.), the European jay. [Prov.Eng.] {Sea piet} (Zo[ o]l.),… …   The Collaborative International Dictionary of English

  • Piet — m Low German, Dutch, and Flemish form of PETER (SEE Peter). Variant: Dutch: Pieter …   First names dictionary

  • Piet — Il peut s agir d une forme néerlandaise (flamande) courte du prénom Pierre. Mais le nom est fréquent en Poitou Charentes et en Vendée, avec un sens plus incertain : on peut penser à un dérivé de pie désignant soit l oiseau (surnom d un bavard ?) …   Noms de famille

  • Piet — Programme affichant Piet Piet est un langage de programmation exotique créé par David Morgan Mar, dont les programmes sont des images matricielles inspirées des travaux du peintre néerlandais Piet Mondrian[1] …   Wikipédia en Français

  • Piet — Of all the surnames which derive from the saints and disciples of the Christian church, Petros meaning The rock has provided the world with the greatest number of both given names and the later medieval surnames. In their different spellings… …   Surnames reference

  • Piet Mondrian — Piet Mondrian, 1899 Piet Mondrian (eigentlich Pieter Cornelis Mondriaan; * 7. März 1872 in Amersfoort, Niederlande; † 1. Februar 1944 in New York City, Vereinigte Staaten) war ein niederländischer Maler der klassischen …   Deutsch Wikipedia

  • Piet Moget — [[Fichier: Piet Moget peignant |220px|center|Piet Moget Port la Nouvelle]] Piet Moget Port la Nouvelle …   Wikipédia en Français

  • Piet Jeegers — is a Dutch clarinetist, teaching at the Brussels Conservatory. He is active as a conductor of wind bands and is the founder and leader of the Piet Jeegers Clarinet Choir.He is noted for developing a series of mouthpieces based on the notion that… …   Wikipedia

  • Piet Mondrian — in 1899 Birth name Pieter Cornelis Mondriaan Born 7 March 1872(1872 03 0 …   Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»