The Ruby VM: Episode I へたれ訳

Matz にっき(2007-02-17) から The Ruby VM: Episode I へ。

Google 翻訳 の助けを借りて、へたれな訳をつけてみました。誤訳満載だと思いますので、突っ込み大歓迎です。

Ruby VM:エピソード I

こんにちは。お二人が私の質問に回答することを合意してくれたことに感謝します。始めに自己紹介と Ruby の開発におけるあなたの役割を教えてください。

松本さん(以下 Matz):

私はプログラミング言語 Ruby の設計者であり、最初の実装者です。本名は ゆきひろ まつもと、英語だと You-Key-Hero Matz-Motor みたいに聞こえるでしょうね。でも覚えるにも発音するにも長すぎるので、私のことは単に Matz と呼んで下さい。

Ruby の開発は 1993 年から行っています。現在、Ruby は非常に複雑になり、性能面で問題を抱えています。インタプリタを書き直す、という曖昧な計画は長年持っていましたが、現在のインタプリタを放り出してまで、新しいインタプリタを開発し始めるモチベーションを得たことはありませんでした。

そんな時、ささださんが私のベーパーウェアよりも遥かに明るい未来をもたらすと思われる YARV を持って来ました。そう、それは動きます − そこで私は彼にコアの公式な開発者の役割を依頼しました。私は言語設計と実装の両方を楽しみますが、言語実装の天才ではないと思っています。YARV を見たときに、設計にフォーカスするときが来たのかもしれない、と思ったのです。

ささだ さん(以下 ko1):

YARV と私に関心を寄せていただいたことに感謝します。ところで私は "YARV" が何を表しているのかを考えています。Yet Another(別のもの) ではないからです。ある人は「YARV は RubyVM ではない」と提示しました。もし YARV が "YARV ain't RubyRM" の意味なら、YARV とは何でしょうか?

私は こういち ささだ です。こういちは名前で、"いち" は日本語で "1" の意味なので、私は "ko1" をニックネームにしています。私は東京...学部の助手です。私の研究対象はシステムソフトウェア、特にオペレーティングシステムプログラミング言語、並列システム などです。日本 Ruby の会 のメンバーで、日本 Ruby 会議 のような Ruby のイベントを計画していますし、Rubyist Magazine の編集者の一人でもあります。また、NadokaRavaRucheme の開発も行っています。ええ、YARV - また別のRubyVM の開発者ですね。

Ruby 開発者としての役割ですか? 松本さんの VM ハッキングの楽しみを奪うことでしょうか?


このインタビューのポイントは、Ruby インタプリタの未来について語っていただくことです。そのスタートとして、YARV/Rite が何かを説明していただけますか? 従来の Ruby インタプリタと設計上、どのように異なっているのでしょうか?

Matz:

私は言語の実装よりも設計の方に常に関心があります。そのため Ruby インタプリタは常にそうあるべき状態よりも遅れています。私は低木になっている全ての果実を刈り取ったように思うのですが、それゆえに性能向上を成し遂げるにはコア全体を再実装する必要がありそうでした。私は 'Rite' という開発コードの新しいインタプリタを 2001年に計画しましたが、そのプロジェクトを開始するに足る十分なモチベーションが全くありません。多分私は余りに忙しく、またあまりに怠惰なのです。

そんな時に ささだ くんがやってきて、彼の YARV を我々に見せてくれました。それまでにも何人も Ruby インタプリタの実装を試みていましたが、ささだ くんだけが機能セットの実装レベルに達していました(その時点では、です。現在は Ruby 1.8 互換の JRubyRubyCLR があります)。そこで彼に新しいコアの開発に加わるように誘ったところ、彼が同意してくれたのです。

2007年 1月 1日、彼は YARV を我々のリポジトリの trunk にチェックインしましたので、現在の Ruby 1.9 の公式コアです。私は未だ matzruby ブランチで従来の実装の作業を行っています。従来のインタプリタ上で新しい言語機能を試す方が私とっては楽だからですが、最終的には新しいエンジンに切り替えるつもりです。

YARV 実装の詳細は、ささだ くんが説明してくれるでしょう。


つまり Rite という名称は置き去りにして、YARV を使い続けるということでしょうか? それともある時点で YARV は名称が変更されるのでしょうか?

Matz:

ささだ くんが私に頼みでもしない限り、Rite という名称がこの言語の現行世代で使用されることはないでしょう。既に Ruby のための 'VM' になっているので、ささだ くんが YARV のまま行くかどうか、私には分かりません。

ko1:

YARV は消滅しました :)

実際、キーワード "yarv" を構造体名、関数名、ファイル名から削除しています。YARV は単にコード名であり、まつもと さんによってつけられたものではありません。現在、YARV は "Yet Another(別のもの)" ではありません。この記事では、公式リポジトリRuby トランクの最新版に "YARV" というキーワードを使います。

第一に、YARV は仮想シーケンシャル命令を実行するシンプルスタックマシンです。従来のインタプリタ(matzruby)は抽象構文ツリー(AST)を単純に横断します。これは明らかに遅いのです。YARV は AST を YARV バイトコードコンパイルし、それを実行します。

第二に、Ruby スレッドを実装するために YARV は(OS などでサポートされている)ネイティブスレッドを使用します。これは拡張ライブラリでブロッキングタスクを実行できることを意味します。Ruby の仕様では、ブロッキングタスクは Thread#raise によって中断されるべきです。詳細は [ruby-core:10252] をご覧ください。スレッド生成は(グリーンスレッドの) matzruby よりも遅いので、同時に多数のスレッドを作成するべきではありません。ネイティブスレッドのサポートは、(複数の)マルチコア CPU のような並列マシン上で複数の Ruby スクリプトを並列に実行できる、ということではありません。現在の実装は同期問題(多くの拡張ライブラリはスレッドセーフを考慮していません。array.c、string.c などを参照してください。)を避けるために Giant VM ロックを使用しています。

第三に、私は特化命令などの数多くの最適化を行いました。これらの機能は私が YARV を開発している目的です。これらの最適化テクニックにより、Toy ベンチマークの実行が早くなりました。

YARV はパーサー/構文/スペック(まつもと さんの楽しみ)、GC(メモリ/オブジェクト 管理)、String/Array/Hash/Regexp などの拡張ライブラリは変更しません。そのため、文字列処理などにボトルネックがある場合、スクリプトの実行速度は上がりません。


お二方、Ruby/YARV のマージ完了、おめでとうございます。数多くの作業があったに違いありませんが、Ruby 界全体が非常に興奮していますね。さてマージが実行されたことで、Ruby の開発方法にどのような変化がみられますか?

Matz:

賛辞は多くの作業を行った ささだ くんになされるべきです。私は開発の場を matzruby(従来のインタプリタ用ブランチ)から trunk(the yarv)に移行しつつあります。最近、私は trunk に幾つかの新機能、例えばクラスローカルインスタンス変数と新たなローカル変数スコープを実装しました。移行は割とすぐに完了することでしょう。

元々 trunk は ささだ くんの成果ですから、皆さんの、特に ささだ くんからの多くの手助けが以前にも増して必要です。従来のインタプリタに関しては全て(ええ、多分ほとんど)知っていますが、新しいものは未だミステリアスです。私は新しいものに十分満足しています。より明確で、良く練られていて、しかもより早いのです。

ko1:

ありがとうございます。(実際、ruby コードをコミットするための CVS アカウントを持っていませんし)私は Ruby 開発者としては初心者ですから、ruby の開発における変化がどうなるかは分かりません:)


全ての Rubyist たちが利用可能な、YARV 上で動作する Ruby の最初の製品リリースはいつでしょうか?

Matz:

短い答え: "今"。

長い応え:YARV は我々の Subversion リポジトリ経由で既に誰でも利用可能です。今、入手してそれで遊ぶことができます。しかし、我々がそうすべきあるくらい勤勉であれば、我々からの最初の公式 "リリース" は 2007年のクリスマスでしょう。私はどれくらい自分が怠惰であるかを知っているので、そのリリースを私がつまずかせない様に努力したいと思います ;-)

http://blog.grayproductions.net/articles/2007/02/16/the-ruby-vm-episode-i