ITエンジニア/デザイナ向けにオープンソースを毎日紹介

Pythonは2系と3系で大幅にコードを変えなければなりません。それによって2系で作られた資産がそのままになってしまっているケースも多いのではないでしょうか。かといってサポートできる年数を考えるとコンバートが必要になります。

そのコンバート先としてPython3系ではなくGoを考えてみたくなるのがGrumpyです。GrumpyはGoogle製のPythonコードをGoに変換するソフトウェアです。

Grumpyの使い方

使い方は幾つかありますが、単純にコードを実行する場合は次のようにします。

$ echo "print 'hello, world'" | make run
hello, world

コードを変換することもできます。これは変換して生成されたGoのコードです。元のコードは上記の

print "hello, world"
です。

package main
import (
    πg "grumpy"
    π_os "os"
)
func initModule(πF *πg.Frame, _ []*πg.Object) (*πg.Object, *πg.BaseException) {
    var πTemp001 []*πg.Object
    _ = πTemp001
    var πE *πg.BaseException; _ = πE
    for ; πF.State() >= 0; πF.PopCheckpoint() {
        switch πF.State() {
        case 0:
        default: panic("unexpected function state")
        }
        // line 1: print "hello, world"
        πF.SetLineno(1)
        πTemp001 = make([]*πg.Object, 1)
        πTemp001[0] = πg.NewStr("hello, world").ToObject()
        if πE = πg.Print(πF, πTemp001, true); πE != nil {
            continue
        }
        return nil, nil
    }
    return nil, πE
}
var Code *πg.Code
func main() {
    Code = πg.NewCode("<module>", "hello.py", nil, 0, initModule)
    π_os.Exit(πg.RunMain(Code))
}

実際にGoとして実行ができます。

$ go run hello.go 
hello, world

Grumpyの特徴はPythonのコードを完全にGoのコードに変換することで、VMを使っていないということです。これによって、既存の資産をPythonからGoへ移行させることはもちろん、実行時の速度についても問題ありません。

GrumpyはGo/Python製のオープンソース・ソフトウェア(Apache Licnese 2.0)です。

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

 

MOONGIFTの関連記事

コメント

  • DevRel
  • Com2