名前が技術的負債になるとき — 「Perl 6」は 19 年間、検証されていない主張を運んだ
「Perl 6」という名前は、付けた 2000 年の時点では正しかった。当時それは本当に Perl 5 の後継として構想されていたからだ。しかし対象が変わっても、名前は変わらない。名前は付けた瞬間の主張を凍結し、その主張が偽になってからも運び続ける。三方が損をする構造と、名前が負債になる条件の話をする。
この回は、Perl を知らない人にも読めるように書く。 扱うのは Perl 6 の話だが、問題そのものは言語に固有ではないからだ。
名前は、付けた時点では正しかった
まずここを押さえておきたい。
2000 年 7 月、Larry Wall が「Perl 6」という名前を付けたとき、その名前は正しかった。
第 3 話で書いたとおり、発表時点の Perl 6 は本当に Perl 5 の後継として構想されていた。 互換性を全部切るつもりは必ずしもなく、移行ツールで橋を架ける案もあった。 「Perl の次のバージョン」という名前は、当時の計画を正確に表していた。
そして、対象の方が変わった。
- 設計が進むほど互換性が保てなくなった(第 4 話)
- 15 年かかった(第 8 話)
- その間に Perl 5 が独自に進化した(第 2 話)
名前は変わらなかった。
ここに、この連載の 10 番目の型がある。
名前は、付けた瞬間の主張を凍結する。 対象は変わるが、名前は自動的には更新されない。
これが「名前が技術的負債になる」ということの正体だ。 誰かが間違った名前を付けたのではない。正しかった名前が、正しくなくなった。
そして負債と同じで、放置すると利息がつく。
問題の構造 — 三方が損をする
「Perl 6」という名前が抱えたのは、次の 2 つが両立しないことだった。
- 事実: Perl 6 は Perl 5 と互換性のない別言語である
- 名前が主張すること: Perl 6 は Perl 5 の次のバージョンである
ここから 3 つの損失が同時に発生する。全員が損をするのが、この構造の特徴だ。
1. Perl 5 側の損失 — 「もう終わった言語」
バージョン番号が 5 で止まっているように見える。
「6 が出ているのに 5 を使っているのか」「6 に移行できないレガシー」という読まれ方をする。
実際には Perl 5 は毎年リリースされ、機能も増えていた(第 2 話)。 しかし外から見ると、15 年間バージョンが上がっていない言語に見えた。
これは実害である。採用判断、求人、学習対象の選択 — どれも「その言語は生きているか」で 判断される。第 8 話の最後に書いた「最も損をしたのは Perl 5 だったかもしれない」は、ここだ。
2. Perl 6 側の損失 — 「まだ完成していない Perl」
独立した言語として評価されない。
- 「Perl 6 はいつ出るの?」と 15 年間聞かれ続ける(2015 年に出た後も聞かれた)
- grammar や並行モデルといった独自性が、評価の対象にならない。 「Perl の新しいバージョン」という枠で見られるので、比較対象が Perl 5 になってしまう
- Perl を嫌う人が、中身を見ずに Perl 6 も除外する
「Perl」という語が、正の遺産と負の遺産を両方運んでくる。 Perl 6 は正の遺産(歴史、コミュニティ、文化)も受け取っていたので、 これは単純な被害ではない。しかし配分は選べなかった。
3. バージョン番号の封鎖
Perl 5 は次のメジャーバージョンに進めない。「6」は使われているからである。
これが最もはっきりした損失だ。 そして改名の直後に Perl 7 構想が出てきたことが、それを裏付けている。
2020 年 6 月、当時のリリース責任者 Sawyer X が Perl 7 を発表した。
中身は「Perl 5.32 の文法に、モダンな既定値を最初から入れたもの」で、
use strict などを既定 ON にするという提案である。
つまり 新機能ではなく既定値の変更。そしてそれを可能にした前提が、 改名によって「6」が空いたことだった。
(なお Perl 7 は 2021 年に延期され、2026 年 9 月時点でリリースされていない。 現行は Perl 5.44 である。ここは誤りやすいので正確に書いておく。)
なぜ 19 年も放置されたのか
問題は 2000 年代から指摘されていた。改名は 2019 年である。なぜ 19 年かかったか。
| 理由 | 内容 |
|---|---|
| 改名は敗北に見える | 「Perl 6 は失敗したから名前を変える」と読まれることへの警戒 |
| 創始者が付けた名前だった | 名前は Larry Wall が与えたもので、外から変える性質のものではないという感覚 |
| 19 年分の資産 | ドキュメント・URL・リポジトリ・モジュール名がすべて「perl6」を含む |
| 代替案が決まらない | 名前の候補は多数出たが合意に至らなかった |
| 完成前は動かせない | 未完成のまま改名すると、逃げたように見える |
最後の点が決定的だった。 2015 年に 6.c が出て「完成した言語」になったからこそ、 2019 年の改名が「敗北」ではなく「独立」として実行できた。
第 8 話をこう終えたのは、そのためだ。
未完成のまま名前を変えれば「失敗したから逃げた」と読まれる。 完成した言語が名前を変えるのは、独立の宣言になる。
名前が負債になる条件
ここから一般化する。Perl 6 の事例が価値を持つのは、負債の額が測れるからだ。 19 年間、毎回説明が必要だった、という形で。
条件はこう書ける。
名前が、その対象について検証されていない主張を含んでいるとき、 その名前は負債になる。
「Perl 6」という名前は「これは Perl 5 の次のバージョンである」という主張を含んでいた。 その主張は(途中から)事実ではなくなったが、名前が毎回それを繰り返す。
だから説明のコストが恒常的に発生する。1 回の説明では終わらない。 記事を書くたび、カンファレンスで話すたび、新しい人が来るたびに、同じ説明をする。
同型の例
同じ構造は、言語以外にもいくらでもある。
| 名前に含めたもの | いつ負債になるか |
|---|---|
バージョン番号(Foo 2) |
次が出せない。あるいは「2 の次は 3 のはず」と期待される |
実装言語(RubyGems、node-*) |
実装を変えられない。変えても名前が嘘をつく |
所属組織(AcmeDB) |
移管・分社・買収で名前が現実とずれる |
相対的な位置(next-*、new-*、*2.0) |
いつまでも next ではいられない |
想定用途(ImageMagick が動画も扱う、など) |
用途が広がると名前が狭くなる |
共通しているのは、名前が「今そうである」ことではなく 「これからもそうである」ことを暗黙に約束している点だ。
そして第 8 話で書いたとおり、約束は変更を縛る。
リリースとは機能の追加ではなく、変えないという約束の開始である。
名前も同じ構造を持っている。 ただし名前の場合、 その約束は明示的に宣言されたものではなく、読む側が勝手に読み取るものである。 だから約束した覚えがないのに、破ったことになる。
改名で解決しなかったこと
公平のために書く。改名は問題の一部しか解決していない。
知名度は上がっていない
むしろ「Perl 6」を知る人が「Raku」を知らない、という事態が生じた。 名前を捨てるとき、その名前に付いていた認知も一緒に捨てることになる。
検索が分断された
2019 年以前の資料は全部「Perl 6」表記である。 Raku で検索しても、それ以前の良質な記事に辿り着けない。
これは意外に重い。19 年分の蓄積が、新しい名前からは見えなくなった。 (次回扱う移行計画書が、URL のリダイレクトに 301 を選んでいるのは、 まさにこれを最小化するためである。)
改名それ自体がニュースになった
「Perl 6 が Raku に改名」という見出しは、 「Perl 6 は失敗したから改名した」という読まれ方もされた。 第 8 話で「完成したから改名できた」と書いたが、 その文脈が伝わらなければ、ただの敗北宣言に見える。
それでもやる価値はあったのか
答えは「達成されたことと、されなかったことを並べて、読む人が決める」でいい。 この連載の書き方の規則 3 条に、そう書いた。
ただし 1 つ、事実として言えることがある。
改名しなければ、損失は止まらなかった。 19 年のあいだ、この名前は毎日利息を生んでいた。 Perl 5 が「終わった言語」に見えることも、Perl 6 が「未完成」に見えることも、 放っておいて減るものではなかった。
改名は「これ以上の損失を止める」ための措置である。 それまでの 19 年を取り戻すものではない。 そこは混同しない方がいい。
次回は、その改名が具体的に何をする作業だったのかを見る。 19 年使った名前を変えるとき、人は何を数えるのか。
次回(第 10 話): Path to Raku。
公開された移行計画書を読む。ファイル拡張子、環境変数、.perl メソッド、
IRC チャンネル、ハッシュタグ、そして 301 リダイレクト。
改名とは「名前が埋まっている場所を全部数える作業」である。