暴躁的运行时和transpiler

grumpy-tools的Python项目详细描述


#暴躁:去运行python

[![构建状态](https://travis-ci.org/alanjds/grumpy.svg?branch=master)(https://travis ci.org/alanjds/grumpy)
[![加入聊天网站https://gitter.im/grumpy-devel/lobby](https://badges.gitter.im/grumpy-devel/lobby.svg)](https://gitter.im/grumpy-devel/lobby?utm廑u source=badge&utm廑u medium=badge&utm廑u campaign=pr badge&utm廑u content=badge

关键的区别在于它将python源代码编译成源代码,然后编译成原生代码,而不是字节码。这意味着脾气暴躁的人没有虚拟机。编译后的go
源代码是对grumpy运行时的一系列调用,这是一个go库,其目的与python c api类似(尽管api与cpython的不兼容)。


` exec`、`eval`和`compile`:grumpy不支持cpython的这些动态特性,因为grumpy模块由静态编译的go
代码组成。支持动态执行需要将脾气暴躁的程序
与编译工具链捆绑在一起,这样做既笨拙又不切实际
缓慢。c扩展模块:grumpy的api和对象布局与cpython不同,因此支持c扩展很困难。原则上,可以通过一个api桥接层来支持它们,比如
[jyni](http://jyni.org)为jython提供的接口,但是很难维护,
在调用扩展
模块时会增加很大的开销。Grumpy将支持但尚未支持


不完整功能有三个基本类别:

1。[语言功能](https://github.com/google/grumpy/wiki/missing features language features):
除了
[旧式类(http://stackoverflow.com/questions/54867/python中旧样式类和新样式类之间的区别是什么)。
还有一些运算符尚不受支持。

2.[内置函数和类型](https://github.com/google/grumpy/wiki/missing features builtins):
内置函数中有许多缺少的函数和类型尚未实现。对于内置类型
也缺少很多方法。


3。[标准库](https://github.com/google/grumpy/wiki/missing features standard libraries):
python标准库非常大,而且大部分都是纯python,因此随着语言功能和内置项的填写,许多模块都会工作。但是,cpython中还有许多库是需要重写的c
扩展模块。c语言环境支持:go不像c那样支持语言环境。因此,
某些依赖于语言环境的功能目前可能与
cpython中的功能不同。


` pip`.

方法1:二进制包

为了方便起见,pypi提供了python包。在安装过程中,
许多grumpy将被编译并存储在python安装中。

|暴躁的运行方法1:make run:

grumprun在stdin上使用python代码并在grumpy下编译和运行代码:

`````
cd grumpy tools src
python2 setup.py develop
cd../grumpy runtime src
echo"print"hello,世界上的"make run
``

由于grumpy程序是静态链接的,所以程序中的所有模块都必须由gopath上的grumpy工具链来查找。grumpy在gopath的python子目录中查找与python模块对应的go包。按照惯例,此子目录还用于暂存python源代码,使其类似于pythonpath。

从grumpy源代码分发运行的根目录:

```
cd grumpy tools src
python2 setup.py develop
cd../grumpy runtime src
make
export path=$pwd/build/bin:$path
export gopath=$pwd/build
exportpythonpath=$pwd/build/lib/python2.7/site包
````

进入python目录的模块:

```
cd grumpy runtime src
echo'def hello():打印"hello,world">;$gopath/src//upython/hello.py
```

运行以下命令:

```
cd grumpy runtime src
mkdir-p$gopath/src/\uu python/hello
grumpc-modname=hello$gopath/src/\uu python/hello.py>;\
$gopath/src/\u python/hello/module.go
````

我们还可以将这个模块导入到使用grumprun构建的python程序


````
cd grumpy runtime src
echo'来自hello import hello;hello()'grumprun
````

grumprun正在做一些事情:

1。将给定的python代码编译成一个伪go包,就像我们
生成的python\\\/hello/module.go上面的
2一样。生成从步骤1导入go包的主go包。
将其作为我们的python包执行
3。在步骤2中生成的主包上执行"go run"。


into go programs and
"grumpy transpile"是cli工具,负责解析python代码并从中生成go代码。` grumpy transpile是用python编写的,它使用[`pythonparser`](https://github.com/m-labs/pythonparser)
模块来完成解析。


grumpy transpile生成的go代码在运行grumpy程序时对表示python对象的数据结构执行操作。` grumpy`go library
(源位于源
发行版的"grumpy runtime src/runtime"子目录中)。这个运行时类似于python c api,由grumpy定义的许多
结构和操作在cpython中都有对应的结构和操作。

标准库的这些部分rary是从cpython 2.7中复制的
(可能有轻微的修改)。出于许可的原因,这些文件保存在"grumpy runtime src/third-party"子目录中。


标准库中不能用纯python编写的部分,例如文件和目录操作,保存在"grumpy runtime src/lib"子目录中。
在cpython中,这类模块是以c扩展的形式编写的。在grumpy中,
是用python编写的,但它们使用本地go扩展来访问python中不可用的功能。


\转到编译逻辑。
-`grumpy runtime src/lib`:特定于grumpy的python标准库实现。
-`grumpy runtime src/runtime`:转到grumpy运行库的源代码。
-`grumpy runtime src/third-party/ouroboros`:从
[大毒蛇项目](https://github.com/pybee/ouroboros)。
-`grumpy runtime src/third-party/pypy`:从pypypy复制的纯python标准库。
-`grumpy runtime src/third-party/stdlib`:从cpython复制的纯python标准库。
-`grumpy tools src/grumpy-tools/`:Transcompilation and utility cli.

\评论?在[暴躁的用户@google groups.com](https://groups.google.com/forum/上给我们留言!论坛/暴躁用户)
或加入我们的[Gitter频道](https://gitter.im/grumpy-devel/lobby)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
SimpleDataFormat如何在Java中使用DateFormat解析月份完整格式字符串?   java如何使用JBPM引导规则创建规则流组?   java将SQL和应用程序服务器从Windows 2003迁移到Windows server 2012 R2   java游戏!Intellij IDEA中的2.0控制台无法工作   java如何获取线程内分配的变量值?   java Android翻译动画导致Clicklistener问题   当前平台不支持java桌面API   java删除hashmap条目的方法是什么   用Spring MVC提供Java模型的RDF表示?   JAVA未安装Java的计算机上的lang.UnsupportedClassVersionError   java SQLite从3个表中获取使用组合的对象列表   来自的TLS握手错误的java云数据流BQ输出挂起作业   java如何使用SPARQL进行排名?   java如何在Netbeans 7.1.2中设置${user}的值?   java如何删除括号内的字符串?