python转go_如何看待将Python代码转换成Go代码并进一步编译的 Grumpy 项目?

明确声明了的,以及可以预见到的与 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」。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值