直ぐには見ないかもしれないけど、pythonのソースをダウンロードした。
(3.4のソースをダウンロードした方が良いのかも知れないが、今のところは、使っている2.7(Python-2.7.7)のソースをダウンロードしている)
今後、仕様とかの確認(の補助として)で、ソースの中身まで見ることがあるかも知れない。
まずはmainを探してみる
取り敢えず、python.exeの入り口までを探しておく。
まず、main()で検索。
Demoとかを含め、幾つかmainが見つかった。
ファイル名とかで、大体の当たりは付くけど、Makefileも見て、検索結果を確定させる。
検索の結果、PC/os2emx/Makefileに下記の行があった。
PYTHON.EXE= python.exe
こいつをビルドしてるところは
$(PYTHON.EXE): $(SRC.EXE) $(PYTHON.EXEIMP) $(OUT)python.def
$(CC) -Zmt $(LDMODE.EXE) -Zcrtdll -Wall $(INCLUDE) -L. -lgcc -o $@ $(SRC.EXE) $(PYTHON.EXEIMP) $(LIBS) $(OUT)python.def
$(EXEOPT) -aq $(PYTHON.EXE) -h$(NFILES)
で、SRC.EXEの定義は、
SRC.EXE= $(TOP)Modules/python.c
このソース(Modules/python.c)の中身は、次の通り。
/* Minimal main program -- everything is loaded from the library */
#include "Python.h"
#ifdef __FreeBSD__
#include <floatingpoint.h>
#endif
int
main(int argc, char **argv)
{
/* 754 requires that FP exceptions run in "no stop" mode by default,
* and until C vendors implement C99's ways to control FP exceptions,
* Python requires non-stop mode. Alas, some platforms enable FP
* exceptions by default. Here we disable them.
*/
#ifdef __FreeBSD__
fp_except_t m;
m = fpgetmask();
fpsetmask(m & ~FP_X_OFL);
#endif
return Py_Main(argc, argv);
}
API
上記を調べている内に、pythonのAPIはpython.defにエントリが定義されているように思った。
python.defの中身はこんな感じ。(抜粋)
LIBRARY PYTHON24 INITINSTANCE TERMINSTANCE
DESCRIPTION 'Python 2.4 Core DLL'
PROTMODE
DATA MULTIPLE NONSHARED
EXPORTS
; Data
PyCFunction_Type
・・・
; Code
PyArg_Parse
・・・
Py_Initialize
Py_IsInitialized
Py_Main
Py_MakePendingCalls
Py_Malloc
Py_NewInterpreter
Py_Realloc
・・・
当然かも知れないけど、APIのリファレンスサイトもある。
ソースを調べるんだったら、APIのエントリを切り口にしても良いかもしれない。
ダンロードしたソースの中のDemoフォルダに、APIを使ったサンプルコードぽいものがあった。
APIまで使うかは分からないけど、使う場合には参考になるかも知れない。
pythonのソースを読もうと思った時に、解析した情報が載っているサイトを検索したけど、今のところ見つけられていない。
アウトラインが分かると助かるんだけど。
もう少し調べて面白いネタがあったら、記事を投稿させてもらうかも。