2017-01-05

GoogleがGoによるPython実装、Grumpyを発表

Googleが既存の社内のPythonコードをGoで実行するためのPython実装を公開している。

Google Open Source Blog: Grumpy: Go running Python!

google/grumpy: Grumpy is a Python to Go source code transcompiler and runtime.

Googleの発表によれば、YouTubeのフロントエンドサーバーとYouTube APIはほとんどPythonで書かれているという。現在、YouTubeのフロントエンドはCPython 2.7で実行されているが、CPythonの制約により効率化には限界があるのだという。

GrumpyはPython 2.7のコードをGoのコードに変換するツールgrumpcの実装だ。grumpcはPythonで実装されていて、astモジュールでPythonをパースして、Goコードを吐く。Python 2.7系なのは、Google社内の既存のコードを実行するためだ。また、execやevalのようなインタープリター実装ならではの極めて動的な一部の機能は実装されていない。

Pythonの標準ライブラリのほとんどは、Pythonによって実装されているため、そのままGoコードに変換されてそのまま動く。

GrumpyにはGlobal Interpreter Lockが存在しない。リファレンスカウントのかわりにGoのGCにオブジェクトの生存管理を任せている。この設計のため、C extension moduleは使えない。この設計により、GrumpyはCPython実装よりスケールすると主張している。

Grumpyはインタープリターではない。Grumpyによって生成されたGoのコードは通常通りGoによってコンパイルされる。これにより開発やデプロイの柔軟性は下がるが、ネイティブコードへのコンパイルと静的解析により、より効率のよいコードを吐くことができるようになる。また、Grumpyで実行されるPythonコードは、Goのモジュールをimportして使うことができる。

興味深いツールだ。

No comments:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.