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

FUSE と Ruby FUSE を用いて作りました。

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 だの夢一杯なものが入っています。
なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h