1.7 early access kit という仮称で提案した構想ですが、先ほど
shim/ に最初のスケッチを import し、正式にスタートしました。

http://www.ruby-lang.org/~knu/cgi-bin/cvsweb.cgi/shim/

 古いバージョンの Ruby に新しいバージョンで導入された新機能や
新モジュールを付加・提供するものです。ちょうど詰め木の役割をする
ことから、「Ruby Shim」と名付けました。

 まずは、 ruby 1.6 に 1.7 の新機能やモジュールを補完するものを
作ります。実装において、以下のようなポリシーで行きたいと思います。

- やりすぎない。完璧に実装するにはコストが掛かりすぎるという場合、
  あきらめてドキュメントに制限事項を書く。(ケースによっては実行時
  コストにも配慮する)

- 後方互換性にも留意する。既定の動作は変えずに、機能を拡張または
  付加する。(変えてしまうと、 ruby 1.6 のスクリプトから気軽に
  使えなくなってしまう)

- 名前空間を汚染しないようにする。既存のメソッドを退避するときは
  「__rubyNN_」とプレフィックスを付ける。(単に _ や __ だと衝突の
  危険が高い)

- ちゃんとドキュメントとテストをコードに合わせて更新する。
  (テストは 1.6 と 1.7 の両方で行う)

今のところ、サンプルとして Dir::chdir() の拡張だけ入れてあります。
徐々に充実させていきましょう。


 とにかく完璧は目指しません。おいしいところ、やりやすいところを
つまみ食いで持ってきます。たとえ不完全でも、ドキュメントをしっかり
しておけば POLS の面からも問題はありません。


 おっと、肝心の使い方はというと

    # 全部使う場合
    begin
      require 'features/ruby18'
    rescue LoadError; end

    # 一部を選択的に使う場合
    begin
      require 'features/ruby18/dir'
    rescue LoadError; end

    # あとはインストールされた機能を普通に使うだけ
    Dir.chdir("foo") { puts Dir.pwd }

という具合です。当然ながら ruby18 は ruby 1.7 以上では不要なので、
shim/ruby16 以下のコードは ruby 1.6 専用で OK です。


 そういうわけで、コードや要望を募集します。ドキュメントおよび
テストが必須ですが、ドキュメントについては適宜英訳しますので、
日本語で構いません。よろしくお願いします。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"Somewhere out of a memory.. of lighted streets on quiet nights.."