Gaucheスクリプトとload-path
モジュールがまだちょっと微妙。もうちょっと勉強する。あと run-process は使ったら負けなので使わなかった。次は sys-opentty で仮想端末。
2012-04-03 18:12:35Gauche で適当な機能ごとにモジュール分けするときはどんな方法がいいのかな。define-module / use だとカレントディレクトリ見てくれないから、(add-load-path ".") とかやっちゃってもいいのかしら。初期値に無いってことは作法に反している気がする
2012-04-03 21:20:20@cryks 「常にモジュールがあるディレクトリで起動する」とわかっているなら(add-load-path ".")して良いと思います。デフォルトで"."が入ってないのは、前述の仮定がほとんどのスクリプトでは成り立たないからです。
2012-04-03 21:27:25汎用ライブラリっぽいものは(gauche-library-directory)とかに突っ込んだりするけど、適当な大きさのモジュール分ける時ってどうしたらいんだろう・・・
2012-04-03 21:28:21@valvallow ファイル分割したいなら、そのファイルを実行時に探せないとならないので、gauche-site-library-directoryに入れるか、独自ディレクトリに入れてスクリプト内で適当にload-pathを設定するかですね。
2012-04-03 21:31:52@valvallow ファイル分割しなくていい(名前空間だけの問題)ならひとつのファイル内に複数のdefine-module書いて、必要に応じてimportすることもできますよ。
2012-04-03 21:32:50スクリプトのディレクトリを *load-path* に突っ込んだところで、→のような問題がが。うーん。 http://t.co/PeqAvqOx
2012-04-03 21:35:06@cryks ファイルを分けたいのか、名前空間を分けたいのかでやり方がいくつかあると思います。ファイルを分けるならload-pathを何らかの方法で通す必要が。名前空間を分けるだけならファイル内にdefine-moduleをいくつも書くことはできます (利用にはimportを)
2012-04-03 21:36:57@anohana @valvallow gosh のオプションや環境変数でもパスの追加はできるので、別にシェルスクリプトを用意しといてそこから gauche スクリプトを起動するようにすればパスの設定はシェルスクリプトに追い出せますね。
2012-04-03 21:38:12@SaitoAtsushi @valvallow はい。gaucheスクリプト自体にパスを埋め込んでしまうのは (configure+makeでスクリプトを書き換えるというメカニズムを併用しないなら) あまり筋が良くないかと。
2012-04-03 21:39:56@anohana 目的はファイル分割ですねー。 @SaitoAtsushi さんのシェルスクリプト用意の方法も良さそうなので、いろいろやってみます!
2012-04-03 21:40:19@anohana なるほど。一ファイル内にdefine-moduleが複数書いてあるのはどこかのコードで見たことがあります。私が知りたかったのは「独自ディレクトリに入れてスクリプト内で適当にload-pathを設定する」の方でした。というよりその辺りの作法というか慣習というか。
2012-04-03 21:41:11@cryks 僕もモジュールのロード周りはいつも迷います。makeの中や他コマンドから呼び出されることが前提なら、configure時に絶対パスを調べて、実行時にモジュールのパスをgoshの-Iオプションで渡すことが多いです。
2012-04-03 21:42:56@cryks @SaitoAtsushi ドキュメントされていませんが、(include <filename>)とすると、「その時点で読んでいるファイルからの相対パス」で<filename>を読み込むことができます。これはモジュールとは関係ないです。
2012-04-03 21:43:45@valvallow 私は、独自ディレクトリに入れるならどうせmake installするんだからmakeでパスを埋め込んじゃえばいいよ派です。インストール前のテストについてはgosh -I. すればいいですし。
2012-04-03 21:46:08そうかgauche-library-directoryだけじゃなくてgauche-site-library-directoryもあるのか
2012-04-03 21:47:20@anohana @cryks include は単にファイルをそこに挿入したかのように扱うということでしょうか。 R7RS 風機能の先取り?
2012-04-03 21:47:59