coreserver.jpにPerl 5.10.0をインストールしようと思い立ちました。CORE-ONEやCORE-Bの契約プランは2008年現在未だに提供されていませんのでCORE-Aで契約しているのですが、CORE-BやCORE-Aは専有プランではなく共用サーバでの相乗りなので、当然/usr/local/bin/perlは神聖にして不可侵です。モジュールのインストールであればさっくりオレオレライブラリをでっち上げてuse lib '/virtual/USERID/oreore_lib';などとすれば良いのですが(XSモジュールも自分の環境でmake installしてFTP putする)、言語処理系のインストールというのは少々大変そうです。
何故急にそんなことを思ったのかという理由や、今後の作業見込みについて、備忘録的に記してみます。
学士の異常な愛情 または私は如何にして5.8.8で無理をするのを止めて5.10.0を愛するようになったか
今やすっかり5.10
「各プログラムのPerl5.10.0での動作確認完了」という約1年前の記事では、
- エスペラント翻訳システムErmitejoの開発版がPerl 5.10で動いた
- だけど5.10に依存するようなコードは書かないつもりである
と書いていました。しかし、現在のErmitejoは、Perl 5.10をガンガン使って書いてしまっています。それはひとえに、以下のような理由によるものです。
- メソッド解決順序(MRO)をC3アルゴリズム式としたい。
mroプラグマ( use mro 'c3')で実現する。これは、素性構造(feature structure)の型階層(type hierarchy)を、Perlのクラス(class)によって実装することとしたため。多重継承の中でも厄介な所謂「菱形継承(ダイヤモンド継承)問題」を解決するための洗練された方法と認識している。 switch文を実現するgiven/when/default組み込み関数を使いたい(use feature 'switch'またはuse 5.010_000が必要)。if/elsif/else構文より効率が良く、コードの見通しも良くなるため。- defined-or(dor)演算子「
//」を使いたい。
だって楽したいんだもん
勿論、これらは5.10の専売特許ではありません。以下のような代替策があるのですが、いずれも面倒なので楽をしたいという気持ちになります(項番は理由のものと対称です)。
- MROは、Class::C3モジュールで実装可能である。しかし、折角言語コアに採用されるようになったのでそれを使いたいという気持ちと、いちいち
Class::C3::initializeするのが面倒くさいので、5.10で使いたい。 switchは、if/elsif/elseを連ねたり、文脈によっては三項演算子(?:)を使って表形式で記述したりすることで代替可能である。また、ソースフィルタであるSwitchモジュールを使うなどの代替策(その他の方式などは「Perl表技集」で有名な増田隆さんの手になるMASのページのswitch文も参照)があるが、折角言語コアに採用されたうえに安定性・高速性に秀でているので、5.10で使いたい。$foo = defiend $foo ? $foo : $bar;すればいいが、折角言語コアに採用(以下略
これらはLally Wall他著『プログラミングPerl』(Programming Perl)にある通りのプログラマ三大美徳のうち無精(laziness)と短気(impatience)の一端と考えられます。
よく言われる話ですが、どんな言語を使おうとその人の書けるコードの量はほぼ一定であるとするならば、同じ機能を実現するためには実装は短くした方が良いですし、その分バグの作り込みも減ろうというものです。
作業の見通し
同じ構成の自鯖で環境を作る
さっくり検索した限りでは、そのものずばりな作業記録はWebには見つかりませんでした。ただ、私も少し興味があるGaucheという言語の処理系のインストール方法がTheoriaさんのはてなダイアリーに記載されていました。「XREA に Gauche をインストールする際に出くわした問題」という記事と、そのコメントです。
要するに愚直に環境の同期を取るだけなのですが、もう少し細かく落とし込むと、
- coreserver.jp(XREA)と同じ構成のサーバを自分で建てて(仮想PCで実現するのが楽そう)、
- /virtual/USERID/以下にbinやらlibやらをぶちまけるようにConfigureして、
- ついでに必要なモジュールもppm installしつつ、
- 揃った塊をFTP putしてしまう(一旦tar.gzに固めてcoreserver.jp側で展開した方が速い)……
という方法になりそうです。
現行コードへの還元は正月明け?
といっても試し方を理解しただけで、実際やるとなると時間が必要です。
「近況報告:翻訳システムのコードが2万行に到達」の記事で大見得を切って「文章内単語訳で熟語翻訳が可能になります(近日中)」などと書いたのですが、それらのモジュール群も軒並みuse 5.010_000;してしまっているので、実のところPerl 5.10.0をインストール出来なければそれらが日の目を見ることはなかったりもします。
時間というのは例によって曲者で、次にまとまった時間が取れそうなのは正月休みになってしまうかも知れません。官公庁ならいざ知らず、うちの会社は12月30日か1月5日の選択休暇と三が日を除けばカレンダー通りの営業日なので、あまり時間の期待は出来ませんが。現在直接持っているのがオンライン系の業務で、バッチ系の業務ではないというのがせめてもの救いでしょうか。
ということで、成否にかかわらず今後作業報告を行います。乞うご期待?!
追記 2009/01/11:作業報告をPerl 5.10.0のcoreserver.jpへの導入(実践編)で公開しました。意外と楽で拍子抜けしてしまいました。
あ、WordPressも新版が出ていた
余談になりますが、WordPressも昨日遂に待望の2.7がリリースされたので、そろそろアップデートしておくかなぁと思ってもいます。流石にこれは正月休みより前にはやりたいものです。
確かに5.10.0ほしいですよね
その後のレポート楽しみにしています
Comment by coreserverの1ユーザ — 2009/01/08 木曜日 @ 02:01:17
coreserverのお仲間からコメントいただき、嬉しいです。
しかし、残念ながら正月休みには試行出来ませんでした。ごめんなさい。2月頃に本年度の夏休みを取れる(正直なところ破綻気味な用字用語です……)見込みですが、それまでには何とかけりを付けてしまいたいです。
その際には、追ってこのブログで報告させていただきます。
Comment by Gardejo — 2009/01/09 金曜日 @ 01:26:31
お待たせ致しました。日曜日の昼下がりにまったりと実施しました。結果は成功です。
要はパッケージをそのままインストールするだけですが、委細は「追記」のリンク先にてご紹介しています。ご参考までに。
Comment by Gardejo — 2009/01/11 日曜日 @ 18:24:29