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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

今日は特別に、バージョン5.0のどら焼きじゃ!…って、バージョン管理みたいに言ってみただけじゃぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。