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