言語のJITコンパイラをその言語自身で作る事の意義とは

Pypyのロゴマークの意義が分かった気がします
50
くまぎ @kumagi

PythonのJITコンパイラを実装するだけなら実装に用いる言語はPythonである必要は無いわけだけれど、Rubiniusといいその言語の処理系をその言語自身で作ることの意義って具体的に何があるんですか?実行の為にCPythonやCRubyを別に必要とすると考えると欠点しか…?

2011-11-02 13:28:05
ぽんこつ @ponkotuy

pypyはPythonの実行環境をPythonで作ってる。ある言語の実行環境をその言語そのもので実装することは意義がある、って言ってたな、pypyでは [Mimas]

2011-11-02 13:30:28
くまぎ @kumagi

@ponkotuy 意義がある、という発言までは聞いたことがあります。その意義がわからないだけで。

2011-11-02 13:33:08
ぽんこつ @ponkotuy

@kumagi むー、言語の実用性を保証する、とかかなぁ?

2011-11-02 13:33:55
くまぎ @kumagi

@ponkotuy それならPythonによるRuby処理系やRubyによるPython処理系が有っても不思議はないのに見かけないのは一体?

2011-11-02 13:36:44
ぽんこつ @ponkotuy

@kumagi うーん、PythonistaがPythonの処理系実装するのにRuby選ぶのは不思議なんだけどなーw PythonistaがRubyの処理系実装したくなるか、っていうのも含めて

2011-11-02 13:39:14
くまぎ @kumagi

@ponkotuy 好みの問題、という事ですか?

2011-11-02 13:39:46
ぽんこつ @ponkotuy

@kumagi じゃないかな。言語の選択ってある程度絞ったらあとは好みの問題、っていう側面結構ありそうだし、RubyとPythonの違いを考えると尚更

2011-11-02 13:40:23
rayfill @rayfill

@kumagi より高級な言語で実装することでいろんな概念の実装が楽にできるメリットとかはあるんじゃないでしょうか?

2011-11-02 13:35:49
くまぎ @kumagi

@rayfill 実装が楽にできても遅くなったら意味がないですしJITコンパイラを作るのが楽だとは思えないです。

2011-11-02 13:44:20
kinaba @kinaba

@kumagi 「今さらCとかの低級言語で言語処理系書くのしんどい書きたくない」という問題を解消するという意義があるのでは。では処理系を記述する言語に何を選ぶかというと、Pythonの処理系作る人の得意な言語はPythonでしょうし、Rubyも然りで。他の言語選ぶよりも自然な気が

2011-11-02 13:36:26
natsutan @natsutan

@kinaba あーそれで俺LispはLispで書かれるのか。ちょっと目から鱗。

2011-11-02 13:38:04
くまぎ @kumagi

@kinaba 「処理系の実装のハードルを下げる」という事でしょうか。個人的にはC言語でPython処理系を書くよりもPythonでPythonのJITコンパイラを書くほうがしんどいんじゃないかと想像するのですが。

2011-11-02 13:39:24
kinaba @kinaba

@kumagi え、そうでしょうか。Cで書くよりもPythonで書く方が難しくなるポイントがあまり思い当たらないのですが (型がない…とかは好みの問題だと思うのでさておくとして)。

2011-11-02 13:44:11
くまぎ @kumagi

@kinaba 同じものを作り上げるなら遙かにPythonの方が簡単だと思いますが、それでもJITコンパイル付き処理系を書くというのはハードルが更に高そうに見えます。元よりJITコンパイラを作りたくて、その為の一番簡単そうな選択肢がその言語自身、という事でしょうか。

2011-11-02 13:47:00
SODA Noriyuki @n_soda

@kinaba @kumagi レキシカルアナライザだけは、Cで書いた方がPythonより簡単なような(Cは十分速くて、素直に書けばOKなので)。もっとも、Java VMくらいの速度が出れば素直に書くのに十分な性能なので、僕がPythonの性能を見くびりすぎかもしれませんが。

2011-11-02 13:55:57
GNUE(鵺) @gnue

@finalfusion @natsutan @kinaba @kumagi ん、もともとは缶切り(別の言語やコンパイラ)がなくても缶が開けるようにってことだと思ったけど。ま、Python の JIT がそこまで考えてやってるかどうかは知らないけど

2011-11-02 13:43:19
中村 実 @nminoru_jp

@kumagi @rayfill hogehogeランタイムのJITコンパイラをhogehoge言語で書いてhogehogeランタイム上で動作させることによって、JITコンパイラ自身もJITコンパイルされて高速化されるのです (`・ω・´)

2011-11-02 13:47:21
kinaba @kinaba

@kumagi PyPyは必ずしもPython処理系だけじゃなくて「JITコンパイラつき処理系をお手軽に作るためのランタイム」なので、それが作りたいものであって、「そのお手軽に作るための記述言語」はどうせなら自分自身にしておいた方が自分自身も高速化できるし悪くないと思うのです

2011-11-02 13:50:58
くまぎ @kumagi

@kinaba 特定の処理系に依存しないJITコンパイラ!!そんな途方もないものを作ってたんですね。なるほど、氷解しました。ありがとうございます。

2011-11-02 13:53:22
kinaba @kinaba

@kumagi Prolog とか JavaScript (のサブセット) とか Brainfuck とか色々処理系がPyPyのレポジトリか別レポジトリだったかに入ってます (Pyrologについては割と色々資料も http://t.co/2JHs72P0)

2011-11-02 13:57:50
くまぎ @kumagi

@kinaba な、なにこれすごい怖い…!

2011-11-02 14:03:49