Christmas — 15 年後の最初の安定版、そしてリリースとは約束である

「Perl 6 はクリスマスに出る」は長年のジョークだった。どの年のクリスマスかは言わない、というのがオチである。2015 年、Larry Wall はその年を指定した。そして 12 月 25 日、Perl 6.c Christmas がリリースされる。技術的には前から動いていた。変わったのは約束だった — ここから先、この挙動は壊さない、という。

perlrakuhistoryreleaseversioningprogramming-languages

年を言わないジョーク

Perl 6 には長年のジョークがあった。

「Perl 6 はクリスマスに出る」

オチは、どの年のクリスマスかを言わないことである。

15 年のあいだ、このジョークは機能し続けた。 機能し続けたということは、出ていなかったということでもある。

2015 年 2 月、FOSDEM の基調講演で Larry Wall がこの年を指定した。 講演のタイトルは “Get Ready to Party!”。 2015 年のクリスマスに、Perl 6 を production ready として出す。

同年 10 月の開発版リリースのとき、彼はこう言っている。

昔からのジョークのとおり、Perl 6 はこのクリスマスに出ます。 ただし今回は、本気です。

2015 年 12 月 25 日 — Perl 6.c “Christmas”

出た。発表から 15 年 5 か月である。

何がリリースされたのか

ここは正確に書く必要がある。リリースされたのは、roast の凍結点である。

第 7 話で書いたとおり、Perl 6 の仕様の正はテストスイート roast にある。 「6.c」とは、2015 年 12 月時点の roast を凍結したものを指す。

処理系(Rakudo)はその前から動いていた。 Rakudo Star は 2010 年から配布されていたし、 実用的に Perl 6 を書いている人は既にいた。

では、何が変わったのか。

リリースとは機能ではなく約束である

ここが、この回でいちばん書きたい点だ。

6.c のリリースで技術的に増えた機能は、ほとんど無い。 増えたのは約束である。

ここから先、6.c の roast が通る挙動は壊さない。

これが安定版リリースの意味だ。

  • それまで: 仕様は動く。今日書いたコードが来月動かなくなりうる
  • それ以降: 6.c を宣言したコードは、将来の Rakudo でも動く

第 4 話で書いた use v6.c; というバージョンプラグマが、この約束の実装である。 1 つの処理系が複数の言語版を同時にサポートする。

ここに、この連載の 9 つ目の型がある。

リリースとは機能の追加ではなく、変えないという約束の開始である。

だから「もっと機能が揃ってから出せばよかった」という批判は的を外している。 約束を始めるのが遅れれば遅れるほど、約束が始まらない期間が伸びるだけだからだ。

そして裏を返せば、約束を始めた瞬間から、後方互換性という重荷が始まる。 第 2 話で Perl 5 について書いたことが、Perl 6 にも適用され始めた。

15 年とは何だったのか

ここで一度、この連載の前半をまとめておきたい。 第 3 話で「理由は 4 つある」と予告したものである。

1. 設計が壮大すぎた(第 4 話)

シジル不変性、grammar、多重ディスパッチ、メタ演算子、Junction、遅延評価、 漸進的型付け、MOP、有理数の数値タワー。 どれか 1 つでも言語 1 つ分の仕事で、しかも互いに独立ではなかった。

2. 実装基盤の賭けを外した(第 6 話)

Parrot に長く投資し、最終的に使われなかった。 汎用 VM の前提(複数言語が乗る)が成立しなかった。 2013 年に MoarVM へ移り、そこから 2 年半で 6.c に届いている。 つまり、基盤が決まってからは速かった。

3. 仕様が動き続けた(第 5・7 話)

実装が仕様に追いつくと仕様が動く、という往復が長かった。 これ自体は健全な機構である(Pugs が始めたものだ)。 しかしその往復が VM 層まで届くと、コストの桁が変わる。

4. 専任の担い手が薄かった

Pugs の減速がその最も鮮明な例だった。1 人の離脱が、全体の速度を変えた。

まとめると

怠慢でも混乱でもない。スコープと、基盤選定の 1 回の失敗と、人員の薄さである。

そしてこの 4 つのうち、2 番目だけが「やり直せた」ものだった。 MoarVM への移行は 2013 年で、6.c は 2015 年。 基盤が決まってからの 2 年半が、この言語の実質的な完成期間だったとも言える。

何を得て、何を失ったか

出たこと自体は達成である。15 年かけて、やろうとしたことは概ね実現した。 第 4 話で並べた 9 項目は、ほぼ全部が動く言語として存在している。

しかし、この 15 年で失ったものもある。正直に書く。

失ったもの 1 — 評判

「Perl 6 は遅い」という評価は、主に Parrot 時代のものだった(第 6 話)。 基盤が入れ替わっても、評判は基盤より長く生きた。

失ったもの 2 — 待っていた人

2000 年に「数年で出る」と聞いた人たちは、15 年のあいだに他の言語へ移った。 Ruby on Rails が出て、Python が科学計算で伸びて、 JavaScript がサーバ側にも来て、Go や Rust が現れた。

Perl 6 が出たとき、それを待っていた人の多くは、もう待っていなかった。

失ったもの 3 — Perl 5 との関係

これが最も重い。

Perl 5 は 15 年間、待っていなかった(第 2 話・第 4 話)。 Moose が出て、5.10 が出て、年次リリース体制になり、独自に進化していた。

そして外から見ると、**「6 が出ているのに 5 を使っている」**という奇妙な状態が 15 年続いていた。Perl 5 のユーザは、存在しない後継に追い立てられ続けた。

この 15 年で最も損をしたのは、Perl 6 ではなく Perl 5 だったかもしれない。

6.d “Diwali”(2018 年)

2 番目の言語バージョンが 2018 年に出る。名前は Diwali — ヒンドゥーの灯明祭である。

Christmas、Diwali と、版の名前が文化を跨いでいるのは意識的だろう。 2026 年 9 月時点では 6.d が既定であり、6.e が策定中である(第 12 話で扱う)。

そして、名前の問題が残った

6.c が出たことで、Perl 6 は「完成していない言語」ではなくなった。 技術的な問いには答えが出た。

しかし、名前の問題は何も解決していなかった。

  • Perl 5 は依然として「6 が出たのに 5」と見られる
  • Perl 6 は依然として「Perl の新バージョン」として紹介される
  • Perl 5 は依然としてバージョン番号を進められない

そして重要なことに、6.c が出たことで、初めて改名が可能になった。

未完成のまま名前を変えれば「失敗したから逃げた」と読まれる。 完成した言語が名前を変えるのは、独立の宣言になる。

改名が 2019 年である理由の一部は、ここにある。


次回(第 9 話): 名前が技術的負債になるとき。 「Perl 6」という名前は、19 年間、検証されていない主張を運び続けた。 三方が損をする構造と、名前が負債になる条件の話をする。

← Back to Perl と Raku の系譜