以下は、 PyPy プロジェクトに真剣に興味を持っている潜在的な貢献者にとっては興味深いであろうプロジェクトのリストです。 それらはの殆どは以下のようなパターンを満たします。
参加しようと思っている小さなプロジェクトがあるならば、 issue tracker を見たり、 irc.freenode.net の #pypy チャンネルで発言するか、 mailing list に書いてください。
このリストは、主に潜在的プロジェクトの概要を示します。このリストは定義ではありませんが、自身の改善案を思いつく場合は満足しています。 どのケースにおいても、もしあなたがいくつかのプロジェクトや PyPy に関する他の何かに取り組みたいと思うなら、 IRC で発言するか、 mailing list に書いてください。
これは一つのプロジェクトよりもプロジェクトコンテナの詳細です。 案としては以下のようなものがあります。
アプリケーションのパフォーマンス解析はいつもトリッキーです。 パフォーマンス解析のためには様々ツールがありますが、例えば jitviewer はその助けとなるものの一つです。
jitviewer は以下のスクリーンショットのように、 PyPy の JIT コンパイラによって生成されたコードを階層的な方法で見せるものです。
- ボトムレベルでは、コンパイルされたループの Python ソースが表示されます
- ソースコードの一行ごとに、対応する Python のバイトコードが表示されます
- 命令ごとに対応する JIT 操作が表示され、それは実際にバックエンドに送信され、コンパイルされます (例では i15 = i10 < 2000)
jitviewer は flask と jija2 を使った Web アプリケーションです。(クライアントサイドでは jQuery を使っています) もしあなたが Web 開発のすごいスキルを持っていて、 PyPy を助けたいのであれば最初に手をつけるのには最適なタスクでしょう。 jitviewer は PyPy の内部構造の深い知識を全く必要としないからです。
いくつかの言語が RPython 変換ツールチェインを利用して実装されています。 最も興味深いもののうちの一つが JavaScript 処理系 ですし、他にも schema や prolog などもあります。 その興味のあるプロジェクトで JIT 性能の改善や、様々な最適化の実験をおこないます。
PyPy は取り替え可能なガーベジコレクションの方針を持っています。 これが意味するところは、特殊な目的のために様々なガーベジコレクタを書くことや、一般的な目的のための様々な実験を行えるということです。
例えば
などです。
これは考えることの多い主要なタスクです。ただし、良い計画を考えられる限り、いくつかのサブプロジェクトに分けられます。
通常新しいベンチマークの紹介は満足しています。 紹介する前に我々に相談してください。しかし、実際の Python コードや、まだ上がっていないものに関しては大凡歓迎します。 必要なのは、少なくともスタンドアロンかつパラメータなしで動かせるスクリプトです。 例えば (ベンチマークにはそれらを手に入れることが必要です!)
などです。
我々は既にLLVM の上で PyPy を動かすことを試しました。 LLVM は我々が必要とするほどには枯れていませんでした。 その状況は既に変わっている可能性があり、静的コンパイルのための LLVM バックエンドを復活させる(もしくは新しく書きなおす)ことは良いプロジェクトになります。
制限された C API を持つ PyPy を組み込むことは役立つでしょう。 しかしここに EuroPython での生討論の延長線上にあるとても面白い変形があります。 動的リンクライブラリのプレースホルダとして使える汎用の “libpypy.so” を持つことができます。 ロードされるとき、それは (ctypes 経由で)エクスポートされたいインタフェイスをインストールする .py モジュールを実行します。 これは、.so ファイルをロードしたい様々なアプリケーションからインポートされる一つのファイルにまとまった汎用的な .so ファイルを私たちに与えるでしょう。