Grumpy - PythonのコードをGoに変換
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.