Grumpy: Go 运行 Python

概览
Grumpy是一个把python代码编译成Go代码的编译器和一个运行时,它旨在替换CPython2.7. 关键的区别是它将Python源代码编译为Go源代码, 然后将其编译为本机代码,而不是字节码. 这意味着Grumpy没有VM. 编译的Go源代码是对Grumpy运行时的一系列调用, Go的库服务与Python C API的作用是一样的(尽管不直接支持C API)
限制
Grumpy可能永远不会支持的事情
1.  execeval and compile:Grumpy不支持CPython的这些动态特性,因为Grumpy模块包括静态编译的Go代码. 支持动态执行需要将Grumpy程序与编译工具链捆绑在一起,这将是很不方便的, 同时也会使Grumpy的运行速度变慢
2.  C扩展模块: Grumpy和CPython相比, 它有一个不同的API和对象布局, 因此支持C扩展将是困难的. 原则上,可以通过JiNI为Jython提供的API桥接层来支持它们, 但是当调用和扩展模块时, 它很难维护并且会增加显着的开销
 
 
Grumpy将支持但尚未支持的事情
1.  语言特性: 有很多运算符还不支持
2.  内置的函数和类型: 有很多内置的函数和类型还不支持
3.  Python标准库非常庞大, 其中许多是纯Python, 因此在语言特性和内置函数被填充后, 许多模块就能使用了. 但是在CPython中还有一些是C扩展模块, 这些模块需要被重写, 这包括re, itertools和其他的模块
 
 
运行Grumpy

注:在运行grumpy之前先安装go

方法1: grumprun

执行Grumpy程序的最简单的方法是使用makerun,它包装一个名为grumprun的shell脚本,它将stdin上的Python代码生成并运行Grumpy下的代码。以下所有命令都在Grumpy源代码分发的根目录下运行:

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

 

方法2: grumpc

对于更复杂的程序,需要使用grumpc(Grumpy编译器)编译Python源代码,然后使用go build构建Go代码.

1.  编写py文件

echo 'print "hello, world"' > hello.py

2.  构建工具链和添加使工具链工作的环境变量

make
export GOPATH=$PWD/build
export PYTHONPATH=$PWD/build/lib/python2.7/site-packages # go 编译器所在的目录,最好将这些环境变量设置在/etc/profile文件中,避免每次从新登陆机器都要设置这些环境变量

3.  编译py文件生成一个二进制文件

tools/grumpc hello.py > hello.go
go build -o hello hello.go

4.  执行二进制文件

./hello

 

发展Grumpy

Grumpy有三个基本的组件,你可以根据你的功能来扩展它们.

grumpc

grumpc是一个解析Python代码然后生成Go代码的工具.它是用Python语言写的, 用ast模块来实现解析Python代码的功能. Grumpc的脚本在tools目录下,它依赖于compiler目录下的很多python模块

 

Grumpy运行时

grumpc生成的Go代码中的数据结构是和Python源码中的数据结构一一对应的, 这些数据结构和操作在Go库中定义(源码位于运行时子目录中). 这个运行时类似于Python C API, 而且grump中定义的许多结构和操作在CPython中也有对应的定义

 

Grumpy标准库

Python语言中的用纯python写的模块在Grumpy中是可以直接使用的,它们位于third_party/stdlib目录下.对于那些不是用纯python写的python模块,grumpy重新实现了它们, 并把它们保存在lib目录下, 在CPython中它们使用C扩展模块来实现,在Grumpy中它们通过go扩展模块来实现.

 

 

代码结构
  • compiler:  一个Python包, 用来将Python代码反编译为Go代码
  • lib:  Grumpy实现的Python中非纯python写的标准库
  • runtime:  Go语言写的Grumpy运行时代码库
  • third_party/stdlib:  从CPython中复制过来的纯Python写的标准库
  • tools:  把Python反编译为Go的工具包
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值