PyPyのPyObjectの実装が謎い
@kumagi というのは, 普通 TypeCheck マクロは型が定義されているヘッダファイルに書いてあるのですが, 意図的に減らされています. なにか理由があるのだとは思いますが. なので, コンパイル時にだけ Python の dll を利用してるんじゃないでしょうか?
2012-02-23 19:14:47@cocoatomo Pythonのdllという物がどこにあるのか、どこから繋がっているのか、というのがちょっと追いきれません…。うーん、C使ってる時でもdllを作ったことがないので経験不足です。
2012-02-23 19:24:40@kumagi Mac で homebrew で入れると /usr/local/lib/libpython2.7.dylib ここ. ヘッダファイルは /usr/local/include/python2.7/ ← 型チェックマクロはここ見てるんじゃないかな? 分からんけど.
2012-02-23 19:30:57@cocoatomo @kumagi @cocoatomo @kumagi PyPyのコードちょっと見てみました。pypy_decl.hとpypy_macros.hは自動生成で、そのほかはpypy/module/cpyext/includeのコピー。(つづく
2012-02-23 19:37:49@cocoatomo @kumagi @cocoatomo @kumagi PyほげCheckとかのマクロはRPython(pypy/module/cpyext/boolobject.pyなど)で定義されてるんで、マクロというか関数になって、(つづく
2012-02-23 19:39:14@cocoatomo @kumagi バイナリ(windowsだったらdll,linuxだったらso,Macだったらdylib)にありますね~
2012-02-23 19:39:33@yanolab @kumagi @methane もしかして, pypy_decl.h に定義してある型チェック関数がそれですか?
2012-02-23 19:43:16@yanolab @cocoatomo すいません、ubuntuで探してみたのですが、それらしい物.soなファイルが見当たらないです。うーん。
2012-02-23 19:59:24@kumagi @cocoatomo すいません、dllじゃなくてPyPy本体にありました。 objdump -T pypy | grep PyBool_Check <- これ実行してみてください。
2012-02-23 20:14:15@yanolab @cocoatomo http://t.co/u6XwmpsQ おおお、出ます出ます。BinaryHacks読んで構造を推測してきます。
2012-02-23 20:23:12@kumagi @cocoatomo PyPyの場合、CPythonのC言語用APIと互換性をもたせたインタフェースをもたせようとしているので、CPythonではマクロになっているものがPyPyでは関数になっていたりします。
2012-02-23 19:34:56@methane @cocoatomo それは同一のCソースコードが(マクロと関数の)別解釈でも同一の結果に至る事を狙ってる、という事ですか。
2012-02-23 19:43:07@kumagi @cocoatomo そんなかんじですね。今マクロになっているAPIは、 CPython でも将来関数化される可能性は十分あります。
2012-02-23 19:48:09@kumagi @cocoatomo Python X.Y.Z の Y までが同一であれば、 CPython は ABI 互換性を維持するので、マクロ→関数は無いですが、Yが変わるようなバージョンアップではABI互換性は維持されません。
2012-02-23 19:49:03@methane @cocoatomo Python2.8は出ない事になってる予定なので、つまりPython3.3以降からそういう変化が起きるかも、と。
2012-02-23 19:55:05