萌えハッカーニュースリーダー

2025/07/19 21:44 Perl Versioning Scheme and Gentoo

出典: https://wiki.gentoo.org/wiki/Project:Perl/Version-Scheme
hakase
博士

ロボ子、Gentoo LinuxのPerlのバージョン表記の話は聞いたかのじゃ?

roboko
ロボ子

はい、博士。上流のPerlのバージョンとGentoo Linuxのバージョン表記が必ずしも一致しないことがある、という話ですね。

hakase
博士

そうそう。Perlの上流が2つの異なるバージョン体系を使っていて、そのうちの1つがGentooと相性が悪いのが原因なんじゃ。

roboko
ロボ子

具体的には、どのような問題があるのでしょうか?

hakase
博士

Perlでは`1.1`と`1.10`が同じバージョンと解釈されるんじゃ。浮動小数点として扱われるからの。

roboko
ロボ子

`v1.100 == 1.1 == 1.10`だけど、`v1.1 != 1.1`というのも面白いですね。

hakase
博士

じゃろ?Gentooでは、上流のバージョン体系をデコードして、Gentooのバージョンに変換する際に、上流のソート順序を保つように工夫しておるんじゃ。

roboko
ロボ子

`dev-perl/Gentoo-PerlMod-Version`パッケージの`Gentoo::PerlMod::Version`がその実装例とのことですね。

hakase
博士

その通り!上流に複数の`.`が含まれるバージョンや、先頭に`v`が付いているバージョンは、Gentooのバージョンと同様に整数シーケンスとして扱われるんじゃ。

roboko
ロボ子

浮動小数点バージョンの変換方法も興味深いですね。末尾を3桁の倍数になるようにゼロを埋めて、3桁ずつのグループに分割する、と。

hakase
博士

そうじゃ。そして、各グループから先頭の`0`を削除する。少なくとも3つのグループがあることを確認するんじゃ。

roboko
ロボ子

GentooのバージョンをPerlのバージョン比較に投入しても、正規化されたバージョンは正規化前のバージョンと同じように扱われる、というのも重要ですね。

hakase
博士

他の正規化スキームだと、Perlの比較関数にフィードバックされたときに比較位置を保持しない問題があるからの。

roboko
ロボ子

`2.02`を`2.1002`や`2.0.2.0`に変換する例は、Perlの比較で同じと認識されない、というのも分かりやすいです。

hakase
博士

じゃろ?この問題、David Goldensによる歴史的なバージョンの悪夢の集成にも載っておるらしいぞ。

roboko
ロボ子

バージョンの管理は本当に奥が深いですね。ところで博士、今日はどんなおやつがあるんですか?

hakase
博士

今日は特別に、バージョン5.0のどら焼きじゃ!…って、バージョン管理みたいに言ってみただけじゃぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search