docstringのインデントを削る
このissue
コンパイル時 dedent. docstring の先頭行の扱いを考えると別扱いにしたい
str.dednet()
help(func) とかをしたときにどうやって docstring からインデントを削っているかは、 _sitebuiltins.py の Helper クラスから追っかけていけばわかるはず。
それと等価な処理をC言語で実装して、コンパイル段階でインデントを削ってやれば、後方互換性への影響を最小限にしてインデントの分だけ pyc の容量とメモリ使用量を減らせる。
実装するときには PyUnicode の API を利用することもできる。
pyc からロードするときには実行されない処理なので、限界までチューニングする必要はない。
コンパイラのどの部分で実装すればいいかは、 -OO オプションがあったときに docstring を捨てている部分を探せば簡単にたどり着ける。
cleandocをどのモジュールに実装すればいいか
現行の実装は inspect.cleandoc()
ast.get_docstring が inspect.cleandoc() を呼び出している。
_ast にC実装を追加すれば置き換えられる。
inspect から ast を呼び出すのも循環参照にならずにすみそう
_ast は自動生成されるファイルやったー