[Gauche-devel-jp] Re: gosh の開発で行き詰まった

Back to archive index

Shiro Kawai shiro****@lava*****
2004年 7月 12日 (月) 20:23:48 JST


From: shelarcy <shela****@capel*****>
Subject: [Gauche-devel-jp] Re: gosh の開発で行き詰まった
Date: Mon, 12 Jul 2004 20:03:14 +0900

> 有野さんの patch での Scm_ConvertToNativePathname での変換がうまくいってい
> ないのに対し、
> 
> C:\develop\Gauche-0.8\boost>gosh c:\develop\Gauche-0.8\boost\temp\foo.scm
> *** ERROR: cannot find file 
> "./c:\\develop\\Gauche-0.8\\boost\\temp\\foo.scm" to load
> 
> こちらは変換していないので \ の解釈がうまくいっていないというような感じです
> ね。

あれ、ドライブレターは絶対パスとして認識してるはずですが、"./" が
前置されちゃってますね。ドライブレターの判断はload.cのScm_FindFileの 

#ifdef __CYGWIN__
	       /* support for wicked legacy DOS drive letter */
	       || (isalpha(*ptr) && *(ptr+1) == ':')
#endif /* __CYGWIN__ */

でやってます。そこをちゃんと通ってるかどうか確認してもらえますか。

> C:\develop\Gauche-0.8\boost>gosh -i
> gosh>(dynamic-load "c:\develop\Gauche-0.8\boost\libgauche-uvector.dll")
> *** ERROR: cannot find file 
> "c:developGauche-0.8boostlibgauche-uvector.dll" in *load-path* 
> ("undefined_site_arch_dir" "undefined_arch_dir")

こっちはいくつかの問題がごっちゃになってます。
(1) Schemeの文字列リテラル中の'\'はreaderによって解釈されるので、
    dynamic-loadに渡すのは
    "c:\\develop\\Gauche-0.8\\boost\\libgauche-uvector.dll"
    でないといけない。
(2) でも、そもそも有野さんのパッチを開発してた頃の話では、
    ポータビリティの問題もあるので、Scheme界では '/' 区切りを使うことで
    統一しようということだったはず。まあ、上記が絶対パスとして認識されてれば
    そのままファイルi/oルーチンにパス名が渡されるので問題はないかもしれないが。
(3) これは絶対パスのファイルのロードに直接関係ないが、*load-path* が
    ("undefined_site_arch_dir" "undefined_arch_dir")
    のように表示されるということは、arch.hがちゃんと作られてない?

ところで、一般的なアドバイスですが、やみくもに進んでも時間がかかるばかり
です。「問題の分離」というのが非常に有効な手法です。

(a) ソースコードを読んで何がどういう順序で処理されるかの見当をつける

(b) 特定の段階までを通るテストケースを考えて順に実行し、どこの
    段階までは予想通りに通ってどこからは通らないかを見つける。
    (うまいテストケースが作れない場合は、各段階でメッセージを出力させても良い)

なかなかうまく動かなくてしんどいでしょうが、一段づつ「問題の分離→解決」
の手順を踏んでゆくしかないのがこの世界です。ソースコードでどこ何をやってる
のか、等の話はできる限り説明しますので、気長に行きましょう。

--shiro




Gauche-devel-jp メーリングリストの案内
Back to archive index