Piet プログラミング言語の紹介
- Pietは、抽象化された絵のように見えるプログラムを書くためのプログラミング言語
- 幾何学的抽象芸術の分野を切り開いた Piet Mondrian にちなんで命名された
Piet 言語の設計原則
Pietで使用する色
- Pietは20種類の固有の色を使用する
- 色相の循環: 赤 -> 黄 -> 緑 -> シアン -> 青 -> マゼンタ -> 赤
- 明度の循環: 明るい -> 普通 -> 暗い -> 明るい
- 白と黒はこの2つの循環に含まれない
- 追加の色(オレンジ、茶色など)は使用できるが、効果は実装によって異なる
Codel(コーデル)
- Pietコードの基本単位は色ブロック
- 1つ以上の隣接した同一色のコーデルで構成される
- 対角線方向でのみ隣接する色ブロックは連続していない
- 形状に制限はなく、内部に別の色の「穴」を持つこともできる
スタック
- Pietはすべてのデータ値の保存にスタックを使用する
- データ値は整数としてのみ存在するが、Unicode文字値として読み取ったり出力したりできる
- スタックは概念上は無限の深さを持つが、実装では有限の最大サイズを設けてもよい
プログラム実行
- Pietインタプリタは、プログラムの左上のコーデルを含む色ブロックから実行を開始する
- 方向ポインタ(DP)とコーデル選択子(CC)を保持し、次の規則に従って色ブロックを移動する:
- 現在の色ブロックの縁のうち、DP方向でもっとも遠い縁を見つける
- その縁の中で、CC方向でもっとも遠いコーデルを見つける
- そのコーデルから、DP方向に隣接する色ブロックへ移動する
- プログラムが終了するまでこの過程を繰り返す
文法要素
数値
- 黒と白以外の各色ブロックは、そのブロックのコーデル数と同じ整数を表す
- 正の数しか表現できないが、演算子によって負の数を生成できる
- インタプリタは数値に遭遇しても自動的にスタックへ push しない
黒いブロックと縁
- 黒いブロックとプログラムの縁は、プログラムの流れを制限する
- 黒いブロックまたは縁へ移動しようとすると、CCがトグルされ、DPが時計回りに回転する
- 8回試しても移動できなければプログラムは終了する
白いブロック
- 白いブロックは、インタプリタが何の制限もなく通過する「自由」領域
- 白いコーデルをDP方向へ「滑るように」移動して、白以外のブロックに到達する
- 白いブロックを横切って新しい色へ移動しても命令は実行されない
- 白いブロック内で経路を完全にたどり直した場合、プログラムは終了する
命令
- インタプリタが1つの色ブロックから別の色ブロックへ移動するとき、色の変化によって定義される
- 色相循環と明度循環の段階数に応じて、実行する命令が決まる
- 白いブロックを横切って移動した場合、命令は実行されない
- 主な命令:
- push, pop, add, subtract, multiply, divide, mod, not, greater
- pointer, switch, duplicate, roll
- in(number), in(char), out(number), out(char)
GN⁺の意見
- Pietは視覚的に魅力的なプログラミング言語で、抽象芸術とプログラミングのユニークな結び付きを示している
- ただし、実用性の面では限界があるように見える。複雑なプログラムを書くのは簡単ではなさそうだ
- 主に、プログラミング言語設計に関する実験やパズル、芸術作品の制作などに活用できそうだ
- ビジュアルプログラミング言語としては、Google の Blockly や MIT の Scratch のほうが、より実用的な代替になりうる
- やはりPietはあまりにもディープな言語なので、実際の初心者がプログラミング学習用として使うのは難しそうだと感じる
1件のコメント
Hacker Newsの意見
Piet言語のサンプルページにある最後のプログラムは本当に驚きだ。ある人(Pietと呼ばれる)がPiet言語を連想させる作品を見て実行してみたところ、実際に動作した。グラフィックアーティストが偶然実行可能なプログラムを描いた史上初の出来事だ。
Pietはエソテリック・プログラミング言語の中では画期的な実験だが、開発者が意図的にそうしない限り、モンドリアンの絵のように見せるという目標の達成には不十分だ。言語構造そのものが、書かれたものがモンドリアンの絵のように見えるよう設計されていてほしい。
これは「アルゴリズムはどのような見た目をしているのか?」という問いを提起する。ヘルマン・ヘッセの小説『ガラス玉演戯』(Magister Ludi)のようなものを現実に作れるだろうか。視覚志向の人間としてはそう考えたいし、実際にそうしたツールを使おうとしたこともあるが、曖昧な答えのせいで視覚的表現力とモジュール性の間のバランスを取るのが難しい。
こういう類のものは、犯罪スリラーで主人公や捜査官たちを混乱させ、やがて誰かがそれがコードだと見抜くような形で登場しそうだ。私たちはQRコードが便利だと思っていたのに……
Pietを発見するのは、畏敬と混乱と驚異が入り混じる特別な瞬間だ。その様子は、CSポッドキャストでの友人Ozとの会話に収められている。
ある人がPietでクワイン(Quine)を作った。画像は壊れているが、CodeGolfにコピーがある。
大学でエソテリック・プログラミング言語についての小さな講座があり、各自で言語を選んで触ってみた。私はPietを選んだが、面白かった一方で、正直なところ小さなサンプルアプリケーションは美的に満足のいくものではなかった。Pietでアートを作るには達人になる必要がありそうだ。
大学時代にこれに触れて、夜遅くまで簡単なプログラムを書いたが、本当に楽しい体験だった。みんなも一度は試してみることを勧めたい!
サンプルページがすごい。キャンバスがだんだん精巧で美しく発展していくのがわかる。
本当に素晴らしい! Piet作品を集めて、与えられたテキストを返すプログラムを作ることが可能なのか気になる。Pietコードジェネレーターのようなものだ。印刷物にしたら素敵な贈り物になりそうだ!