[#37679] [FEATURE:trunk] EncDet again — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

23 messages 2009/01/03

[#37748] $LOAD_PATHとバージョンの運用の関係 — akira yamada / やまだあきら <akira@...>

1.9系でのバージョンの運用と$LOAD_PATHの値について質問です。

12 messages 2009/01/09
[#37758] Re: $LOAD_PATHとバージョンの運用の関係 — "NARUSE, Yui" <naruse@...> 2009/01/11

成瀬です。

[ruby-dev:37748] $LOAD_PATHとバージョンの運用の関係

From: akira yamada / やまだあきら <akira@...>
Date: 2009-01-09 10:45:03 UTC
List: ruby-dev #37748
1.9系でのバージョンの運用と$LOAD_PATHの値について質問です。

1.9.1RC1のconfigure.inでは、Ruby本体のバージョンを
$LOAD_PATHに埋め込んでいるように見えます。
デフォルトでは「1.9.1」のようにteenyまで含むものです。

このことにより、Ruby 1.9.2がリリースされたとき
Rubyをバージョンアップすると、
バイナリかどうかによらずすべての外部ライブラリ
(ユーザ作成のものも含む)が利用できなくなります。

もちろん、再インストールすれば良いわけですが、
このことからRuby 1.9系ではteenyが上がるごとに
互換性がなくなるような運用を想像してしまいます。

コアチームではこのあたりの運用をどのように考えているのでしょうか。

                       *

と、いうことをIRCでたずねました。
IRC上では以下のような話になりました。

2009-01-09 13:31 <nurse> というか、その辺の話はオフィシャルな場で議論していないので、ruby-devに投げるとよいかもしれませぬ

2009-01-09 13:32 <yugui__> ./configure.inがそうなってないのは、
2009-01-09 13:32 <yugui__> 単にだれもやってないから。

2009-01-09 13:37 <yugui__> ircで話した結果の私の認識:
2009-01-09 13:37 <yugui__> バイナリ互換が破られたら1.9.1の部分がその時のバージョンに上がる!

2009-01-09 13:38 <yugui__> RubyレベルAPIはできるだけ上位互換性の方向で。
2009-01-09 13:38 <unak> (バイナリに依存しない.rbと分離可能だという気分はある)
2009-01-09 13:38 <n0kada> ということはLOAD_PATHはteenyを直接使ってはいけない?
2009-01-09 13:38 <yugui__> n0kada: 本当は。

2009-01-09 13:39 <unak> バイナリAPI仕様バージョン番号、が必要になるということだよね。
2009-01-09 13:39 <n0kada> RUBY_API_VERSIONとかが
2009-01-09 13:39 <unak> これは1.8の頃にも議論があったと記憶している。

2009-01-09 13:53 <unak> というわけで、今後新規に必要になるのは、shared objectのバージョン番号と、ライブラリインストールパスのバージョン番号
2009-01-09 13:54 <unak> という理解で正しいのでしょうか。
2009-01-09 13:55 <nurse> libruby191になるのはだめなの?
2009-01-09 13:56 <unak> だめじゃないんじゃね
2009-01-09 13:56 <nurse> いいと思いますよ、要約してくださる方がいれば
2009-01-09 13:57 <nurse> すると、Rubyのバイナリバージョン番号?
2009-01-09 13:59 <unak> それから両方が決定できるなら。
2009-01-09 13:59 <unak> 外見えで必要なのはさっきの2つ。内部的にそれを何から生成するかは別に何でも。

ざっくりまめると以下のような感じでしょうか。

  * $LOAD_PATHの中の「1.9.1」の部分は、
    本来的にはRubyのAPIバージョン的なものを表している
  * その部分はRubyのAPI互換性に応じて変わる(上がる)
  * *.soに依存している可能性から
    *.rbファイルも同様に互換性が失われる(と考える)

この考え方からするとRubyレベルでの
APIのバージョンを示すものが必要になりそうです
(それがリリース時点のRubyのバージョンでも構わないと思います)。

また、それとは別に、1.9.xのどこかでバイナリ互換性が失われる
可能性があるそうですのでsonameの運用についても
何かしらの方針が必要なのではないかと思います。

APIバージョンおよび$LOAD_PATHの運用については
おおざっぱな言い方になりますが業務で使う場合には
けっこう重要になってくると思います。
(仮にconfigure.inが今のまま1.9.2になったとすると、
そのアップグレードはかなり難しくなります。)

また、APIバージョンおよびsonameの両方について、
私的話になって申し分けないのですけども
バイナリパッケージを作成する上でけっこう重要になってきます。

                       *

そんなわけで、このあたりの運用方針について
どこかで明確になっているとありがたいのですが、
いかがでしょうか。

-- 
ay


In This Thread

Prev Next