作者: Bruce.
日時: 2008/5/25(01:09)
Bruce.です。

あえて脱線してみます。

Rubyの場合、

static VALUE
rb_file_readable_p(VALUE obj, VALUE fname)
{

のように VALUE という型(構造体(へのポインタ))がRubyにおけるオブジェクトの
表現に使われるものですが、

Pythonだと

PyObject *
PyLong_FromLong(long ival)

に出てくるようなPyObjectがそれにあたるようです。
とはいうものの、今回初めて比較してみたのですが(Rubyは結構読んだけど
Pythonは必要なところの操作ルーチンだけでこの辺の定義はスルーしてました)

んで、Rubyが

#if SIZEOF_LONG == SIZEOF_VOIDP
typedef unsigned long VALUE;
typedef unsigned long ID;

といういたって単純なもの(ただし↓のようなものが陰に隠れている)

struct RObject {
    struct RBasic basic;
    union {
	struct {
	    long numiv;
	    VALUE *ivptr;
            struct st_table *iv_index_tbl; /* shortcut for RCLASS_IV_INDEX_TBL(rb_obj_class(obj)) */
	} heap;
	VALUE ary[ROBJECT_EMBED_LEN_MAX];
    } as;
};

それに対してPythonでは

typedef struct _object {
	PyObject_HEAD
} PyObject;

/* PyObject_HEAD defines the initial segment of every PyObject. */
#define PyObject_HEAD			\
	_PyObject_HEAD_EXTRA		\
	Py_ssize_t ob_refcnt;		\
	struct _typeobject *ob_type;


typedef struct _typeobject {
	PyObject_VAR_HEAD
	const char *tp_name; /* For printing, in format "<module>.<name>" */
	Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */

	/* Methods to implement standard operations */
(略)
	/* Method suites for standard classes */
(略)
	/* More standard operations (here for binary compatibility) */
(略)
	/* Functions to access object as input/output buffer */
	PyBufferProcs *tp_as_buffer;

	/* Flags to define presence of optional/expanded features */
	long tp_flags;

	const char *tp_doc; /* Documentation string */

	/* Assigned meaning in release 2.0 */
	/* call function for all accessible objects */
	traverseproc tp_traverse;

	/* delete references to contained objects */
	inquiry tp_clear;

	/* Assigned meaning in release 2.1 */
	/* rich comparisons */
	richcmpfunc tp_richcompare;

	/* weak reference enabler */
	Py_ssize_t tp_weaklistoffset;

	/* Added in release 2.2 */
	/* Iterators */
	getiterfunc tp_iter;
	iternextfunc tp_iternext;

	/* Attribute descriptor and subclassing stuff */
(略)
} PyTypeObject;


とだいぶ趣が違いますね。
#いやーこんなに違うとは思いませんでした。

どっちがいいとか悪いとか云う話ではありませんので念のため。

しまった、短整数をどう扱っているかを確かめてない(笑)