さて、ここしばらくいじっていたpretty printだが、そろそろちゃんと動いたことに満足して関心が薄れてきたので、今までの経験上「ここでなんとなくほったらかすとしばらくしてからどういう状態だったのかわからなくなる!」と思って一気にリポジトリの公開とPython Package Indexに入れるところまでやっつけた。
Python Package Index : prettier 0.92
nishio / prettierprint / source — bitbucket.org
ここまでのストーリーのおさらい。
- Pythonいじり2
- PrettyPrint 1
- とりあえず気合でHaskellで書かれたサンプルコードを逐語訳。
- Pretty Print 2
- テスト
- Pretty Print 3
- テストのカバレッジを100%に。あとすごく遅い現象を発見して、それは遅延評価じゃなくなったせいだった。
- Pretty Print 4
- Pretty Print 6
- チューニング。最初に逐語訳をしたときに考えていた最適化をおおよそ実装し終わる。
今後について
まずセパレータとかインデントの幅とかが決め打ちなのは変更できるべき。Haskell的に表現するなら各種の関数が設定の入ったenvを引数に取るようにするべきで、Python的には「somethingが毎回渡される関数の群れ」ってのは要するに「あるクラスのメソッドたち」なわけだ。だからPrettyPrinterってクラスを作ってその中に移動するのがよかろう。
APIは若干整理の必要がある。論文に書いてあったのでそのまま実装したけど、fillwordsとか必要ないし。コア部分に関してはHaskell前提で書かれているものの直訳だから、Python前提で0から書けばもっと見やすくなるかも知れないなーという気がする。
最終的に標準ライブラリのpprintを置き換えられる性能・機能になれればいいなぁ。