auto use, autoload

Gaucheでモジュールを自動でuseする だいぶ適当にまとめました。
0
Shiro Kawai @anohana

@valvallow @SaitoAtsushi 私は関数名にカーソル合わせてC-x Hでinfoに飛ぶようにしてるのであんまり不自由しないんですが、システムにあるモジュールをスキャンして対応を返してくれるようなバックグラウンドプロセスがあったら何かと使えるかもとは思う。

2012-05-02 19:26:17
Shiro Kawai @anohana

@SaitoAtsushi @valvallow 確かに。さらに、キー操作でuseが足りなかったら足す、等の機能を入れるためにも機械可読な形で関数名からモジュール名が引けるのは重要ですね。

2012-05-02 20:25:53
ayatoy @ayatoy

逆に、Gaucheであるモジュールをuseしたけど全く使ってないじゃん、を検出するのどうしたらいいんだろうか。

2012-05-02 20:30:57
Shiro Kawai @anohana

@ayatoy それはずいぶん前にRuiさんだったかが検出するパッチを書いてくれたのだけれど、もうちょい工夫したくて保留にしてあります。test-moduleとかで検出できると良いと思う。

2012-05-02 20:32:34
Shiro Kawai @anohana

@podhmo @SaitoAtsushi 全部useすると、衝突する機能がある場合にまずいんですよ。標準のライブラリにはあまり無いけど。例えばread-time constructorがかぶるとか、不要なメソッドが追加されちゃうとか。

2012-05-02 20:43:54
ばばろあ @valvallow

vim_goshreplに自動use機能とwhich-module関数を追加しました - aharisuのごみ箱 http://t.co/dGzFac5u

2012-05-04 11:44:21
きくちゃん @kikuchan98

@aharisu ねー、goshrepl の auto use と gauche 標準の autoload との違いってなぁに?

2012-05-04 12:03:07
あはりす @aharisu

@kikuchan98 autoloadというマクロを今知りました^^;で、調べてみたのですが、autoloadの場合は事前に自分でシンボルとモジュールのペアを書いておかないといけないみたいなので、それすら必要ないのがauto use機能という感じでしょうか。

2012-05-04 12:10:58
きくちゃん @kikuchan98

@aharisu でもgoshreplの裏には対応表あるから同じなんだよね? つまり、事前に goshrepl 側で 大量に autoload しておくと同じこと実現できるのかなー、と。

2012-05-04 12:14:35
ばばろあ @valvallow

@kikuchan98 広報と布教なら任せろ!!!!こうですかわかりません!

2012-05-04 12:16:57
らちこ @cryks

@kikuchan98 @aharisu それだと which-module が実現できないのでは。

2012-05-04 12:20:42
あはりす @aharisu

@kikuchan98 できると思います。むしろ、autouseというマクロを知っていればそっちを使っていたかもしれないです。が、auto useしたことを警告として出力したり、モジュール名をレジスタに格納するなど二次的な機能を実装するためには今の方がいいかなと思ってます。

2012-05-04 12:21:38
あはりす @aharisu

@cryks @kikuchan98 そうですね。そういう副産物的な機能も実装するためには今のやり方じゃないとダメですね。

2012-05-04 12:23:15
きくちゃん @kikuchan98

@cryks @aharisu それは逆に本体側で取れてもいいかもよー

2012-05-04 12:25:22
らちこ @cryks

あぁ、autoload の使い方をちょっと勘違いしてた。シンボルを指定するのか。つまり対応表を作って、自分で use するか、最初に autoload するかの違いってことね。でも autoload は generic function あたりで干渉あるみたい

2012-05-04 12:25:50
らちこ @cryks

そもそも、発端としては「この手続きはどこのモジュールに属しているんだっけ」だから、気分的には autoload より、「ここだったから use しといたよー」のほうがスッキリするような気もする。

2012-05-04 12:27:07
あはりす @aharisu

@kikuchan98 @cryks 本体側で取れるとはどういう意味ですか??

2012-05-04 12:27:56
あはりす @aharisu

@cryks which-moduleの実装動機はその通りですが、auto useに関しては少し違います。

2012-05-04 12:30:34
きくちゃん @kikuchan98

@aharisu @cryks autoload済みの一覧はgauche本体に保存されてるはずだから取れたりしないのかなー、と。取れなければ取れるように改造できないかなー、とw

2012-05-04 12:30:53
齊藤敦志 @SaitoAtsushi

global-variable-ref の動きをみれば autoload 用の情報がどう保存されているかわかるのではないか。

2012-05-04 12:34:01
らちこ @cryks

@aharisu おっと、そうなんですね。auto use は which-module の延長線上かと思ってました。コード書く→goshrepl→必要なモジュールが use されていなかった→しといたよー、ついでにこれだったよー 的なものかとw

2012-05-04 12:34:34
あはりす @aharisu

@cryks auto use機能は、コードを書きながら式の一部を選択をしてREPL側で挙動を確かめるとき、いちいちREPLバッファに移って必要なモジュールをuseするのが面倒くさいので勝手にやってほしい、というのが一番最初のきっかけです。

2012-05-04 12:34:38
らちこ @cryks

@aharisu なーるほど!納得しました!

2012-05-04 12:35:09
あはりす @aharisu

@cryks 流れ的にはその通りです。ただauto use機能が先にあって、実装できそうだからついでにwhich-moduleも実装したという感じです。

2012-05-04 12:36:22