RubyFS
今日の呑み会ネタ実装。 Ruby の世界をファイルに抽象化します。なんでもファイル。
http://shinh.skr.jp/ttyplay/rubyfs.html
i@u /mnt/tmp> cat Time/now Sun Mar 19 01:41:00 JST 2006
i@u /mnt/tmp> cat Array/new > @a= i@u /mnt/tmp> echo '"foo"' '"bar"' '"baz"' > @a/push i@u /mnt/tmp> cat @a/push ["foo", "bar", "baz"] i@u /mnt/tmp> cat @a/size 3 i@u /mnt/tmp> cat @a/pop "baz" i@u /mnt/tmp> cat @a/size 2
100 行足らずでぼくにもかけたふぁいるしすてむ。
http://shinh.skr.jp/dat_dir/rubyfs.rb
ただこの仕組みは Lua とか JS とかの方が向いてそうだなぁ… Ruby はややこしすぎる。
追記をいろいろ。色々な補足を。
- ls Time でメソッド一覧が出るのは地味に便利。shell由来の補完も普通に効くし。
- refefs とか作ってその場所を http で公開ってのはどうですかねぇ。
- 本当は echo args > object/method; cat object/method というインターフェースより、 ./object/method args の方がいいと思います。しかしそれには ./object/method はちゃんと実行できるファイルを見せなければならず、かつこれは rubyfs.rb 本体とプロセス間通信できなければなりません。
- この場合は標準入力も使えるのが魅力です。 rubyfs をマウントした部分を公開すればそれだけで分散オブジェクト、みたいな。
- 言語を前提としてそれに協力する OS を作れば幸せすぎるのではと話していました。
- .NetFS とか。
- to_yaml はたまたま消し忘れてた require 'yaml' があったためできたのでした。
- pyfs を見るに cp rubyfs/Array/new pyfs/array とかで言語間通信できるといいなとか思いました。
- というかそういえば mount hoge.rb /mnt/tmp とかするとヘンで良いという話でしたね。
- OSC で見せてもらった Plan9 が sh で ptrace できるっぽいとかいうのを見て妄想していたのでした。
- Ruby FUSE には sqlfs だの yamlfs だの夢一杯なものが入っています。