暴躁的运行时和transpiler

grumpy-runtime的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第三方库


热门话题
java Jsonify使用Jackson来定义嵌套对象   在Swing中禁用java图形调试   java Selenium Webdriver拖放在Jenkins上不起作用   java我对一个显示器的问题有一个非常不切实际的询问   java增强的“for”循环导致ArrayIndexOutOfBoundsException   ArrayAdapter适用于Java中的安卓编程,字符串数组   linux在Ubuntu上通过PulseAudio播放Java音频文件时出错   java在Spring应用程序中加载内部(类路径)和外部属性文件   java使用Maven连接到mySQL   Java应用程序的设计   websocket在电报api java中与dc的连接   java XMLStreamException,因为xml中的(&N)   java从控制台输出到JTextArea   Java导出文本文件   java实现parseInt方法   java为什么servlet容器会同步对特定资源/servlet的多个请求的访问?   循环中的Java“while”变量   用Java编程一个国际象棋游戏,gameOver布尔不起作用   java如何获得真正的JPanel大小?