明确声明了的,以及可以预见到的与 CPython 的区别有:
1,不会完全兼容现在 Python 的全部特性,比如 eval 语句。这点没有办法,因为是 AOT 编译器,运行时生成代码只能放弃了。其实硬要支持也是可以的,现在 Go 要支持 Plugin 了,不过意义不大。
2,不会兼容现有 CAPI,也就是现有“原生扩展”都不打算支持了。我觉得是个好事,Python CAPI 设计的与 CPython 实现耦合性太强,比如会直接依赖内存对象布局,还需要使用引用计数来管理内存,想要完全兼容会是个大坑,并且也会成为性能优化的阻碍。
3,不支持原生 threading 了,而是采用 goroutine 来实现。这样又会导致一系列与 CPython 的不兼容。但是好处是不会再有 GIL 了(有“GIL 情节”的同学应该会很开心),单进程可以跑到多核上了。
4,复用 Go 的 GC 机制。Go 的 GC 一直在进行改进,并且进步明显,Grumpy 能够坐享其成,何乐不为?
5,单纯从(计算)性能角度出发,相对 CPython 应该不会有数量级上的提升。应该比不过现在的 PyPy / Pyston,毕竟动态性强的语言,做 AOT 的话很难获得对象类型相关信息,没有办法在编译时做优化。其实现在 Python 社区已经有很多 AOT 的方案了,比较常用的有 Cython,简单理解的话,可以认为是把 Python 代码编译成对应的 C 代码 + CAPI 调用,内存里的数据都还是 PyObject*。
6,IO 操作都是用 go 的标准库来实现的。也就是说所有 IO 操作都是「天生异步」的,相当于自带 gevent monkey patch,做网络服务性能应该很强劲。
-------------------------------------------------------------------------------------
虽然项目 README 说 「intended
to be a near drop in replacement for CPython 2.7」,不过我觉得大家别想的太好了,大部分现有代码应该都兼容不了的,numpy 什么的不要想了,除非自己重头实现一遍。
我的感觉是,这个项目立项目的就不是做一个 「drop in replacement」的 Python,而是一个可以用来实现高并发网络服务的「Python 方言」。
要想写的爽,又不想担心性能问题的同学,还是多尝试 PyPy 吧,相对已经很成熟了,另外还可以关注一下 dropbox/pyston,目标真的是一个「drop in replacement python」。