名前が技術的負債になるとき — 「Perl 6」は 19 年間、検証されていない主張を運んだ

「Perl 6」という名前は、付けた 2000 年の時点では正しかった。当時それは本当に Perl 5 の後継として構想されていたからだ。しかし対象が変わっても、名前は変わらない。名前は付けた瞬間の主張を凍結し、その主張が偽になってからも運び続ける。三方が損をする構造と、名前が負債になる条件の話をする。

namingtechnical-debtperlrakusoftware-engineeringprogramming-languages

この回は、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 のはず」と期待される
実装言語RubyGemsnode-* 実装を変えられない。変えても名前が嘘をつく
所属組織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 リダイレクト。 改名とは「名前が埋まっている場所を全部数える作業」である。

← Back to Perl と Raku の系譜