Gauche > Archives > 2013/04/22

2013/04/22 09:55:48 UTCyamasushi
#
gosh> (find-module 'komono)
#f
gosh> (with-module gauche (use komono))
#<undef>
gosh> (find-module 'komono)
#<module komono>
#
with-module内でuseしても、外に影響するのですが、影響されないようにするには何を使うべきだったのでしょうか?
#
全モジュール列挙して調査した後は、調査用に読み込んだモジュールは忘れてしまいたいのです。formatが置き替わってしまうので・・・
2013/04/22 10:05:09 UTCyamasushi
#
*** ERROR: string required, but got #t
Stack Trace:
_______________________________________
  0  (string->list format-string)
        At line 36 of "/usr/local/share/gauche-0.9/0.9.4_pre3/lib/srfi-29/format.scm"
  1  (format #t "OK ~a ----> ~a\n" (module-name mod) mod-node)
        At line 35 of "/home/shuji/gauche/textj/check-documented.scm"
#
こんな感じに怒られてしまいます。
#
(define %format (with-module gauche format) )
なので、上のようなコードを使っています。
2013/04/22 10:55:25 UTCkoguro
#
外に影響するのは gaucheモジュールを使っているせいだと思います。
#
sandbox用モジュールを作ってあげればいいんじゃないでしょうか
2013/04/22 10:56:32 UTCshiro
#
一度ロードしたモジュールを完全に忘れることはできません。が、requireかloadするだけなら外から見えないようにはできます。useはrequire+importなので、ロードした後にわざわざ見えるようにする処理が入っています。
2013/04/22 10:58:51 UTCkoguro
#
ちなみに、自作の開発ツールで同じようなことしているのですが、そこでは別プロセスでuseして調べています。
2013/04/22 11:05:35 UTCyamasushi
#
なるほど! ちょっと試してみます。ありがとうございます。。
2013/04/22 11:07:48 UTCkoguro
#
あれ? なんか @chaton_gauche に、今の shiro さんのコメントが流れてないみたいですね
2013/04/22 11:12:03 UTCyamasushi
#
gosh> (use gauche.serializer.aserializer)
*** ERROR: Compile Error: Compile Error: wrong number of arguments: write-rec requires 1, but got 2
"/usr/local/share/gauche-0.9/0.9.4_pre3/lib/gauche/serializer/aserializer.scm":63:(define-method write-to-serializer ( ...

"(standard input)":1:(use gauche.serializer.aserializer)

Stack Trace:
_______________________________________
  0  (eval expr env)
        At line 173 of "/usr/local/share/gauche-0.9/0.9.4_pre3/lib/gauche/interactive.scm"
#
いまの作業中に遭遇している現象なのですけれど、このモジュールが読み込めないなーと思っていたら、replでも読めないのです。
#
rlgosh
gosh> (define-module hoge)
0
gosh> (with-module hoge (require "komono") )
#<undef>
gosh> (find-module 'komono)
#<module komono>
gosh> 
shuji@shuji-PC-LL750FD:~/gauche-dev/Gauche$ rlgosh
gosh> (find-module 'komono)
#f
gosh> (define-module hoge)
0
gosh> (with-module hoge (require "komono") )
#<undef>
gosh> (find-module 'komono)
#<module komono>
gosh>
#
先程のつづきですけれども、hogeをつくって、requireしたのですが、みえてます。
#
あ、余計なゴミが頭についてますね・・すみません。
#
gosh起動
gosh> (find-module 'komono)
#f
gosh> (define-module hoge)
0
gosh> (with-module hoge (require "komono") )
#<undef>
gosh> (find-module 'komono)
#<module komono>
gosh>
2013/04/22 11:19:03 UTCkoguro
#
モジュールってグローバルに管理されていたはずなので、find-moduleで見えるのはいいんじゃないでしょうか。ただ、komono内でexportされているシンボルは hoge 内でしか見えていないと思います。
2013/04/22 11:21:05 UTCshiro
#
find-moduleしたら見えるというのが「モジュールを一度ロードしたら忘れることはできない」ということです。メモリ上には残っちゃう。でもrequireしただけなら原則他に影響は無いはず。例外は(1)他から見えるジェネリックファンクションにメソッドを追加した場合、(2)srfi-10のreader-ctor、あたりかな。
#
gauche.serializer.*モジュールはうんと昔にSTk向けに作ったツールの互換用で、どうもバグが残ってたみたいですね。最近のGaucheコンパイラはチェックが厳しくなったのでひっかかったのでしょう。undocumentedだったし、どうしようかな。
2013/04/22 11:53:24 UTCyamasushi
#
なるほど。そういうことだったのですか。