Hatena::ブログ(Diary)

naoyaのはてなダイアリー

August 30, 2005

Perl6 と後方互換性

LLDN で弾さんの Perl Updates のときに、後方互換性についての質問をしました。僕が聞きたかったことを詳細に言うと「Perl5 のときは 5.6 → 5.8 みたいに後方互換性を維持しつつもバージョンアップという形で進んできたのに、Perl 6 はまるで別言語のようだ。Perl 6 は面白いと思うけど、後方互換性を捨ててまで 6 を作りたいというモチベーションが何なのかを教えて欲しい」ということでした。

で、答えとしては "insane" だってことで作りたいから作ってるみたいなとこだったんですが、今さっき miyagawa さんと話しててわかったこと。

  • Perl 6 は Pugs なり Parrot なりの上で動くから VM で Perl 5 のモジュールが動くようにできるっぽい
  • 実際 use perl5:LWP とかで Perl 6 から 5 のモジュールは使える
  • Pugs では Perl 6 を Perl 5 にコンパイルできるらしい

なんで、僕の質問に自分で回答すると「後方互換性を維持するために踏み出せなかった一歩を、いよいよそれを捨てて実装しましょう、プリミティブや配列やハッシュもオブジェクトとして扱うとか Ruby っぽい特徴を入れて Perl をもっとまともな OO 言語に仕上げましょう、かといって昔の遺産を完全に捨ててしまうってことじゃなく、そこは VM 側で吸収してちゃんと動くようにしましょう」っていうところなんだと思います。

ところで、Pugs を作った Autrijus Tang 氏の Journal で、Pugs で JSAN を使えるようになったとか書いてあり、えらいことになってるようだと miyagawa さんに教えてもらった。天才君すごすぎ。

himazubloghimazublog 2005/08/30 19:03 伊藤さんの理解で合っていると思います。2000年7月のPerl ConferenceでPerl 6の開発開始が宣言されて、そのときの印象としては、Perl 1->2->3->4->5のような互換性を持たせた進化は限界が来たから、互換性のない進化をさせることにしたということだったと思います。で、その時点でも「Perl5はまだまだ続く」と宣言されていました。
今はどうなっているのか把握していませんが、以前のブートストラップ戦略は以下のようなものです。まずPerl6からParrotのバイトコードを生成するコンパイラをPerl5で書く。そして、Perl6が動き始めたらそのコンパイラをPerl6で書き直す。そして、Perl5からParrotのバイトコードを生成するコンパイラもPerl6で書く。したがってPerl5のコードはずっと動く。
ただ、Perl6の開発が発表された時点ではParrotは構想さえなくて、Parrotは最初2001年のエイプリルフールのジョークだったのが本当になってしまったわけで、上記のブートストラップ戦略でさえ明らかに後付けです。

tomi-rutomi-ru 2005/08/31 01:24 疑問なのは、バグフィックスされていくうちに、バージョン番号をどうつけるんだろう。「安定版は真ん中の数字が偶数」の法則を生かすと、5.8.7、5.8.8、5.8.9と、あとちょっとで6になってしまう。5.8.62とかびみょうにふえていくのかな。
LLDNで質問しようとしたのですが遠慮してしまいました。どう思います?

弾 2005/08/31 01:28 >tomi-ruさん
これは、”5.8.10”になることがすでに5.6の時に正式決定しています。
「昔の書き方」だと
5.008010
ですね。

tomi-rutomi-ru 2005/08/31 09:59 >弾さん
あ、最初に聞くべきだった人がものすごいいきおい(4分後、しかもnaoyaさんのブログのコメント欄)で答えてくれました^^ ありがとうございますー

Connection: close