ぎょーむ日誌 2000-08-27 
 
	 
 2000 年 08 月 27 日 (日) 
 
	-  0800 起床.
		曇.
	
-  ああ,
		午前中も図書館から借りてきた本を
		でれでれ読んで終わった.
		もうちょっと充実した週末が送れないもんだろうか.
		とはいえ,
		外に出るのも暑いし.
	
-  昼飯食っても
		非生産的状態は改善されず.
		ああ,
		しかし普段から非生産的なのだから
		日曜日だからといって
		急に生産的になれるはずもないか.
	
-  何を読んでるかって ?
		いやはや,
		このトシになって初めて
		三国志の流れなるものがわかりまして,
		その解説本と言いますか資料みたいなモノ,
		ですね.
	
-  人口分布.
		西暦 200 年ごろの中国って,
		すでにいまの日本の関東地方
		(の一部?) 
		ぐらいの
		人口は擁していたのか.
		ふーん.
		日本は弥生時代.
		米作はとっくに始まってるわけだね.
	
-  ……
		とかいうのは,
		さっさとやらねばならぬ仕事とは
		何の関係もないなあ.
	
-  Emacs というエディター
		(正確には Lisp 動作環境)
		の中でうごめく Mew という
		メイラーの調子悪い.
		起動でコケるようになってしまった
		(Emacs の中でコケる).
		mew をコンパイルしなおしても変化なし.
		mew から受け取ったファイルを
		ネットに送り出したりする im を再構築すると
		問題なく動作するようになった.
	
-  シャワー使って,
		頭と体ごしごしと洗ってみる.
		少しさっぱり.
	
-  1600 ごろ買物に出る.
		晴れ.
		暑い.
		第一京浜むかいのスーパー「マルエツ」.
		まぬけなことに
		レジでお金が足りなくなり,
		いくつかの商品を棚に戻しに行く.
		うーん,
		かなりぼけてますねえ.
	
-  財布の中にはお金が
		あと 700 円ぐらいしかない.
		貧乏カネなし.
		あ,
		これではトートロジーか.
	
-  北大発のメイルが外に出ない,
		という昨日の問題.
		<鳳翔> 発のメイルは
		差し戻されて来た.
		どうもそれによると地環研ではなく,
		北大の根本にある DNS が
		おかしくなってるようだ.
	
-  kubo@ees.hokudai.ac.jp あてに出したときに,
		frontier.esto.or.jp から IP アドレスに
		変換できない,
		という障害.
		なかなか,
		終わってるじゃないか.
	
-  ふん.
		たぶん明日あたり騒ぎになるんだろう.
		「出したメイルが届いていない」
		ってね.
	
-  晩飯の準備する.
		これによって
		私の内部において
		「でれでれ怠け→少し働き」
		という
		モード切り替えが生じたので,
		機会を逃さずに仕事に着手してみる.
	
-  やらなければならんのは,
		plugin 
		(あるいは dynamic linking load)
		というプログラミング技法の習得である.
		Linux なヒトにとって,
		これは GNU C ライブラリーの
		dlopen や dlsym 関数を使いこなすことと
		同義である.
	
-  その効用についてはまたおいおい述べるとして
		……
		dlsym という重要な関数が
		C のコードからは問題なく呼び出せるのに,
		C++ のコードからはうまく呼び出せない,
		という問題にぶちあたる.
		dlopen のほうは問題なさそう.
	
-  そもそも,
		それ以前の問題として
		悪夢のごとき
		C++ のコンパイルエラーに悩まされた.
		たとえば,
        string  ( *plugin_f )( void );
        plugin_f = dlsym( handle, "function" );
		こういうふうに書くと,
		「ANSI C++ ではそーいう void* からの
		暗黙の型変換
		(2 行目)
		は認めてねーんだよ.
		ばーか」
		と C++ コンパイラーに英語 (らしきモノ) で
		罵倒されて
		蹴られてしまう
		(C コンパイラーなら通る).
	-  dlsym はたしかに void* 型なんで,
		plugin_f の本来の型である
		「string を返す関数へのポインター型」
		に変換しなければならん.
		そういうことのようだ.
		さて型変換のキャストを
		どう書くべきか判然としなかったので
		(何しろ
		これまで関数へのポインターなど使ったことないんで),
		コンパイラー相手に試行錯誤を繰り返した結果
		……
		なんとまぁ,
		こう書くのがどうやら正しい,
		ようである.
		ちくしょう.
		呪われている.
        plugin_f = ( string ( * )( void ) ) dlsym( handle, "function" );
	-  藤堂守ふうにいうなら
		「亡んでもよい言語というのは存在するのだ.
		そして俺は,その言語に依存している」.
	
-  さーて,
		C++ 「型キチガイ」コンパイラーの偏執的点検は
		パスできたんだけど,
		コンパイルしたローダーを使っても
		うまく関数を呼び出せない.
		なーんで,
		undefined symbol
		なんだよう.
	
-  晩飯食ってひといきつく.
	 [食事風景]
	
		[食事風景]
		
		時計回りに.ThinkPad.
		
		メモ.麦茶.米飯.根菜
		
		と豆腐の味噌汁.野菜炒
		
		め.C++ 解説本.
	
	
 
	-  飯食ってから色々と調べてみると,
		plugin を C で書くとうまくロードできるのに,
		C++ で書くと ``undefined symbol'' 
		(そんな関数見つかんねーよ)
		などと
		ふざけた実行時エラーが発生する,
		というところまでわかった.
		
			-  呼び出し側 (ローダー)
				の方は C あるいは C++ の
				どちらで書かれていても
				正しく関数をロードできる.
			
-  しかしながら,
				plugin (動的に呼ばれるモジュール側)
				を g++ でコンパイルすると
				(つまり C++ で書いていると)
				正しく関数を見つけられない.
		
 
-  あ,
		もう 2400 か.
		今日はここまで.
	
-  今日の食卓
	
		-  朝 (0900):
			蕎麦.
			昨日から麺類ばかり食ってる.
		
-  昼 (1230):
			スパゲッティー.
			棒状麺類からの呪縛から逃れられず.
			とは言え,
			ソースとしてタマネギみじん切り・ピーマン・
			(例の爆烈だった) 緑トウガラシイッポンを
			炒めたもの.
			タマネギのみじん切りが以前よりは上達したんで,
			少し嬉しい.
		
-  晩 (2130):
			昼の炒めもの残り.
			根菜と豆腐の味噌汁.
			中身はいつものごとく切り干しダイコン.
			ニンジン.
			スーパーで茨城県産のサツマイモを
			安く売ってたんで今日はそれも使用.
			なかなかおいしい.