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