トップ «前の日記(2003-06-14) 最新 次の日記(2003-06-16)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2003-06-15

_ ruby_init()の呼び出し

File: RScriptCore.cpp
#ifndef __IRubyEngine_INTERFACE_DEFINED__
	int stacktop;
	s_pStackTop = reinterpret_cast(&stacktop);
#endif
	LPSTR psz = AllocLibPath();
	static int dummyargc(0);
	static char** vec;
	NtInitialize(&dummyargc, &vec);
	ruby_init();
s_pStackTopの参照用メソッド(RScriptCore.h)
	inline LPBYTE GetStackTop() const { return s_pStackTop; }
を使っている個所(例:RubyObject.cpp)
HRESULT STDMETHODCALLTYPE CRubyObject::GetIDsOfNames( 
		/* [in] */ REFIID riid,
		/* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
		/* [in] */ UINT cNames,
		/* [in] */ LCID lcid,
		/* [size_is][out] */ DISPID __RPC_FAR *rgDispId)
{
#ifdef __IRubyWrapper_INTERFACE_DEFINED__
	IRubyWrapper* p = CRubyWrapper::GetWrapper();
#else
	int stacktop;
	if (reinterpret_cast(&stacktop) > CRScriptCore::GetCurrentEngine()->GetStackTop())
		_alloca(reinterpret_cast(&stacktop) - CRScriptCore::GetCurrentEngine()->GetStackTop());
#endif
*__IRubyWrapper_INTERFACE_DEFINED__が未定義のほうが一般的な組み込み環境。

_ これは何?

rb_init呼び出し時のスタックトップより浅い個所でGCが実行されることが無いように、Rubyに制御を渡す前にallocaでスタックポインタを調整している処理。

_ で、

*これはInit_stack()で行われるので、アプリケーションからインタプリタを呼び出す境界のところでは、これを呼んだほうがいい

とのことだ。が、ruby.hで公開されていない関数を呼ぶのは回避するけどね。

_ 見えるということと認識するということ

眼球の中の悪魔ならぬ緑の小人のために、半円型のマシンの中に顔を突っ込む。その場所は見えているのに、そこで今まさに起こっていることが見えていない。まさに病気だ。

_ システムとしてのオープンソース

多分、マクニーリの考えは正しい。

そして、サービスと叫ぶマイクロソフトも正しい。

ソフトウェアはインフラとシステムに分けて考えなければならない。

すでに、インフラではビジネスは成立しないというのは共通認識だ。(ただし、開発基盤というインフラは重要で、JavaとVisual Studio .NETをどっちも非常に大事にしている。なぜならば、開発インフラなくしてシステム構築も無いからだ)

システムといっても、ソフトウェアだけで構築できるシステムもあれば、エンタープライズシステムもあるし、企業間システムというのもある。

で、手近なところでは、ルータってのもシステムだよな、とOpenBlockSを眺めながら思うのであった。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え