PyPyのPyObjectの実装が謎い

全部同じ実装しててどういう事かと追いかけたら続きはRPythonで!かと思いきやPython2.7との互換性のためごにょごにょ
9
Yutaka Matsubara @mopemope

おっさんにもわかるPyPy講座が必要

2012-02-23 19:14:09
tomo🐧@learning @cocoatomo

@kumagi というのは, 普通 TypeCheck マクロは型が定義されているヘッダファイルに書いてあるのですが, 意図的に減らされています. なにか理由があるのだとは思いますが. なので, コンパイル時にだけ Python の dll を利用してるんじゃないでしょうか?

2012-02-23 19:14:47
くまぎ @kumagi

@cocoatomo Pythonのdllという物がどこにあるのか、どこから繋がっているのか、というのがちょっと追いきれません…。うーん、C使ってる時でもdllを作ったことがないので経験不足です。

2012-02-23 19:24:40
tomo🐧@learning @cocoatomo

@kumagi Mac で homebrew で入れると /usr/local/lib/libpython2.7.dylib ここ. ヘッダファイルは /usr/local/include/python2.7/ ← 型チェックマクロはここ見てるんじゃないかな? 分からんけど.

2012-02-23 19:30:57
くまぎ @kumagi

@cocoatomo おおお、本当だ、pyport.h以下にそれらしい物が一杯。

2012-02-23 19:36:20
Kenji YANO @yanolab

@cocoatomo @kumagi @cocoatomo @kumagi PyPyのコードちょっと見てみました。pypy_decl.hとpypy_macros.hは自動生成で、そのほかはpypy/module/cpyext/includeのコピー。(つづく

2012-02-23 19:37:49
Kenji YANO @yanolab

@cocoatomo @kumagi @cocoatomo @kumagi PyほげCheckとかのマクロはRPython(pypy/module/cpyext/boolobject.pyなど)で定義されてるんで、マクロというか関数になって、(つづく

2012-02-23 19:39:14
Kenji YANO @yanolab

@cocoatomo @kumagi バイナリ(windowsだったらdll,linuxだったらso,Macだったらdylib)にありますね~

2012-02-23 19:39:33
tomo🐧@learning @cocoatomo

@yanolab @kumagi @methane もしかして, pypy_decl.h に定義してある型チェック関数がそれですか?

2012-02-23 19:43:16
くまぎ @kumagi

@yanolab @cocoatomo すいません、ubuntuで探してみたのですが、それらしい物.soなファイルが見当たらないです。うーん。

2012-02-23 19:59:24
Kenji YANO @yanolab

@kumagi @cocoatomo すいません、dllじゃなくてPyPy本体にありました。 objdump -T pypy | grep PyBool_Check <- これ実行してみてください。

2012-02-23 20:14:15
くまぎ @kumagi

@yanolab @cocoatomo http://t.co/u6XwmpsQ おおお、出ます出ます。BinaryHacks読んで構造を推測してきます。

2012-02-23 20:23:12
Inada Naoki @methane

@kumagi @cocoatomo PyPyの場合、CPythonのC言語用APIと互換性をもたせたインタフェースをもたせようとしているので、CPythonではマクロになっているものがPyPyでは関数になっていたりします。

2012-02-23 19:34:56
くまぎ @kumagi

@methane @cocoatomo それは同一のCソースコードが(マクロと関数の)別解釈でも同一の結果に至る事を狙ってる、という事ですか。

2012-02-23 19:43:07
Inada Naoki @methane

@kumagi @cocoatomo そんなかんじですね。今マクロになっているAPIは、 CPython でも将来関数化される可能性は十分あります。

2012-02-23 19:48:09
Inada Naoki @methane

@kumagi @cocoatomo Python X.Y.Z の Y までが同一であれば、 CPython は ABI 互換性を維持するので、マクロ→関数は無いですが、Yが変わるようなバージョンアップではABI互換性は維持されません。

2012-02-23 19:49:03
くまぎ @kumagi

@methane @cocoatomo Python2.8は出ない事になってる予定なので、つまりPython3.3以降からそういう変化が起きるかも、と。

2012-02-23 19:55:05
くまぎ @kumagi

2.6.6ではPyBytesObjectがdefineでPyStringObjectに置換されてる。これは互換性のためか。

2012-02-23 20:37:39
tomo🐧@learning @cocoatomo

誰か Togetter にまとめてくんないかなー? > pypy #pypyja

2012-02-23 20:55:05