uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

Ng - MOPの高速化を達成するさらにもう一つのJVM上の動的言語処理系

http://docs.google.com/View?docid=ah76zbd6xsx2_9ck33c8dp
です。Ngといいつつ表記はNjをリガチャしたような変な字です。発音記号かな。読み方は「んぐ」?

XmlSlurperの作者John Wilson氏へのインタビュー記事があって、これは全体として大変興味深いのですが、この中にNgについての質疑が1個あります。

Q. Ngについて教えてください

A. Ngは「現在のJVM上で動的言語を効率よく(Javaより十倍以上遅い、とかじゃなくて)実行するにはどうしたらよいか」という問題に答えようとしている、今のところ単独のプロジェクトです。現在の実装(Groovy, JRuby Jythonなど)よりも1桁〜2桁の改善を目指しています。アイデアとしては、「逆方向に」言語をデザインするというものです。私は高度に最適化されたランタイムシステムから始めて、そのランタイムシステム向けに言語を導き出しました。この経験から得られた洞察のいくつかを、Groovy 2.0 MOPを再デザインする際にフィードバックしたいと思ってます。私はよく進捗させましたが、結構時間がかかりました。私は算術演算子の実行を、特定のベンチマークで、Javaの2倍以下の速度で実行できるようにしましたし、メソッド呼び出しを10倍以下の速度で実行できるようにしました。私が開発したいくつかのテクニックについてはドキュメントを書き始めています。


とのことです。Groovyにフィードバックされるといいですね。
今までは言語を作ってからMOPシステムを作り改善していったけど、裏から、つまり最適なランタイム・MOPを作ってから、それにあわせてフロントエンドを作り上げるようなアプローチで作ってるってことですかね。
リンク先を見ると、

  • メソッド引数を闇雲にObject[]にするのではなくて、静的によべる固定引数バージョンを何個か用意して、メソッド識別番号みたいなのを割り当てて、switch分で分岐
  • メソッドディスパッチ用のコードを静的に生成しておく

したりするようです。

サザエさん (1)

サザエさん (1)