巷の声を聞くに曰く:
「こんな機能が欲しい、と要望したら、開発版ではこう実現されている、
と教えてもらった。でも、安定版で使えないんじゃ救われない!」
「結局、便利だから開発版の機能を安定版でも実装して使うことにした。
でも、きっとみんな同じようなことをやっているんだろうな。。」
「開発版の追っかけをしていて、自分用のプログラムやライブラリでは
新機能をどんどん使っている。でも安定版じゃ動かないから、人には
使ってもらいにくい。」
「開発版にしかないモジュールをいくつか使いたいが、個別に入手して
インストールするのは大変。それに、開発版にしかないこのモジュール、
そのままじゃ安定版で動かないよね。。」
- Ruby 開発版の新機能のうち、安定版でも実現・追加可能なものを
実装する。また新規追加モジュール群も安定版用にアレンジし、
これらをすべて一まとめにして配布する。
- 1. により、開発版の新機能の早期のテスト・評価・利用を促進し、
来たる次期安定版の品質の向上を図りつつ、ユーザのスムーズな
版の移行をサポートする。
- 各拡張ごとの独立性を確保し、テスト済みの実装を提供することで、
部分的に切り取っての利用にも対応する。(段階的な移行に役立つ)
「Ruby Shim」 shim : 隙間に入れる詰め木の意
- 安定版の挙動は極力変えない。追加や拡張にとどめる。名前空間も
むやみに汚染しない。これにより、動いていたものが動かなくなる
という心配をせずに Shim を使える。
- Shim で追加・拡張された部分の後方互換性は追わない。開発版の
仕様に追随する。
- できるだけ、(だいたいクラス・モジュール単位で見て)拡張同士が
依存しないようにして、部分的な利用も可能にしておく。
- 完璧は目指さない。無理もしない。Shim で実装されないことが我慢
できないほど開発版の機能に浸かってしまった人には、少々の追加
リスクとコストを負って移行してもらえばいい。
- 各モジュールのメンテナに一任。開発版と同期するもよし、安定版
向けリリースということで慎重に保守するもよし。
- メンテナが、安定版用のものは保守するつもりがないという場合、
Shim の committer が適宜開発版と同期する。(意思の表明がない
場合のデフォルト - 負担は強いません)
開発版で廃止・変更された機能を使うと警告を出すようなオプション
またはツールを作ると、移行に大いに役立つかもしれない。余力が出て
きたら考えよう。
あまりに違いが大きかったり、実装が難しいクラス・モジュールは、
場合によってはまるごと拡張モジュールとして(クラス名の頭に Ruby18
などと付けて)提供する手もあるかも。ただし、需要と余力次第。