はじめに
2日ほど生活リズムを崩すことで、Goで書かれたPietの処理系が一応できあがりました。
きっかけ
Pietとは
- David Morgan-Mar氏によって設計された難解プログラミング言語
- 画像がソースコード
- 数値は色の面積で表現される
- 命令は色の色相・彩度の差で表現される
- スタックを1つだけ持っている
- これより詳しいことはDM氏の難解プログラミング言語 - Piet (和訳版)を読むと分かります
なんでPythonじゃないの
- Google App Engineで動かしたい
- PythonかGoしか書けない
- Google App EngineのPythonはversion 2.7
- Python2.7は嫌だーッ
できること
- ある程度のPietのコードを実行することができる
- codelのピクセル数を指定して実行することができる
- DP・CC・スタックの挙動を確認することができる
つらかったところ
- 例外処理ができない
- Goの言語仕様として、try〜catch的なものがない
- エラーは関数の返り値として返ってくる
- if err != nil { return } を書き続ける
- Segmentation Faultは実行時に出る
- スライスの挙動が不明
- スライスを空にしたはずなのにできていないことがあった
- スライスは参照渡し?
- rollしたときに、rollされる位置の次にある値が消えていた
- スライスの結合にappend関数を使う必要がある
- appendのネスト……
- その他
- 整数型がいっぱいあって、Pythonの感覚で代入するとエラーが出る
- 使っていない変数・モジュールがあるとエラー(警告ではない!)で落ちる
GOPATH
を設定し忘れる
TODO
- Piet処理系の完全実装
- 動かないコードがある
- 高速化
- 画像サイズに比例して実行速度が低下する傾向にある
- 巨大なcodelがあると最悪
- 白や、白の次のcodelは縁だけ計算すればよい?
- いい感じの方法があったら教えてください
in(char)
の改良
最後に
Pull Request を下さい。
あと、エナジードリンクをがぶ飲みするのは身体に良くないです。