私が歌川です

@utgwkk が書いている

Pietの処理系をGolangで書いた

github.com

はじめに

2日ほど生活リズムを崩すことで、Goで書かれたPietの処理系が一応できあがりました。

きっかけ

utgwkk.hateblo.jp

Pietとは

なんでPythonじゃないの

できること

  • ある程度の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)の改良
    • UNIXなら/dev/ttyをゴニョゴニョすればいい感じにできるぽい
    • Windows……?

最後に

Pull Request を下さい。
あと、エナジードリンクをがぶ飲みするのは身体に良くないです。