1
j5shi 2017-01-05 07:35:31 +08:00 via iPhone
所以相当于一个编译器而不是解释器?
|
2
loading 2017-01-05 07:38:20 +08:00 via Android
但是我用了 flask ,能搞定?
|
3
wweir 2017-01-05 07:41:15 +08:00 via Android
|
4
j5shi 2017-01-05 07:45:32 +08:00 via iPhone
@wweir 我知道是源码翻译工具,但最终翻译成了 native code ,所以是二进制机器码?如果是,那就成了编译器了,速度应该会有显著提升
|
6
bearqq 2017-01-05 08:17:07 +08:00 via Android
看见 go 第一反应已经是围棋了→_→
试试对二进制 c 扩展的库支持 |
7
echo1937 2017-01-05 08:59:31 +08:00
也有好处,运维脚本直接往服务器上一丢就行了,不用费心环境了。
当然前提是 Google 管生又管养,毕竟这不是 Go 这种大项目。 |
8
congeec 2017-01-05 09:03:04 +08:00
那为嘛不用 Nuikta 编译到 C++呢?
|
10
WildCat 2017-01-05 09:18:59 +08:00
这个翻译器还不如 j2objc ,完全没可读性:
https://gist.github.com/imWildCat/b1c1caaa4e6258759c7748fb36a5a744 |
15
j5shi 2017-01-05 10:13:21 +08:00 via iPhone
@wweir 正是因为看了你的第一个回复和第二个回复,我才觉得你说的非常有问题,你说不需要编译,那我问你如果把 python 翻译成 go 而速度得到提升,你觉得是什么原因?你懂编译原理不?
|
16
kappa 2017-01-05 10:35:59 +08:00
|
18
janxin 2017-01-05 10:57:16 +08:00
|
19
aljun 2017-01-05 11:17:53 +08:00
- -我本还一直想拿 golang 给 py 写个 wsgi (结果一直没时间。。。。。看来。。。可以拿这个撸撸
|
21
jjx 2017-01-05 12:06:35 +08:00
这个东西要成功的前提是 先提出一个语言规范. 规范什么能做什么不能做
否则要兼容 cpython, jython/ironpython/pypy/pyston 这么多年现在都在前面踩坑呢 |
22
fy 2017-01-05 12:38:49 +08:00
这多半只是 Google 内部自用的老代码迁移转换器,不是给你在生产环境用的。
|
23
pwder 2017-01-05 12:55:10 +08:00
https://opensource.googleblog.com/2017/01/grumpy-go-running-python.html
"But the biggest advantage is that interoperability with Go code becomes very powerful and straightforward: Grumpy programs can import Go packages just like Python modules!" |
24
jyf 2017-01-05 13:03:24 +08:00
正打算用这个试试看可能提升下 falcon 框架
|
25
zeroten 2017-01-05 13:11:43 +08:00
额,这翻译出来的东西。。。
按照官方的教程。。。 python 代码: print "hello, world"翻译成了 ```go package main import ( πg "grumpy" π_os "os" ) func initModule(πF *πg.Frame, _ []*πg.Object) (*πg.Object, *πg.BaseException) { var πTemp001 []*πg.Object _ = πTemp001 var πE *πg.BaseException; _ = πE for ; πF.State() >= 0; πF.PopCheckpoint() { switch πF.State() { case 0: default: panic("unexpected function state") } // line 1: print "hello, world" πF.SetLineno(1) πTemp001 = make([]*πg.Object, 1) πTemp001[0] = πg.NewStr("hello,\x20world").ToObject() if πE = πg.Print(πF, πTemp001, true); πE != nil { continue } return nil, nil } return nil, πE } var Code *πg.Code func main() { Code = πg.NewCode("<module>", "hello.py", nil, 0, initModule) π_os.Exit(πg.RunMain(Code)) } ``` 我还以为会翻译成 fmt.Println("hello,world") |
27
zeroten 2017-01-05 13:26:23 +08:00
@yongzhong 所以突然感觉我也好 naive 。。。。既然这样,那中间代码是 go 还是 C 不都一样么。。。干脆叫 python 编译器。。。
|
29
wwqgtxx 2017-01-05 20:10:01 +08:00
@zeroten 如果他不这么做,那大量依赖 python 动态语言特性的 lib 不都报废了,看着是效率高了,实际上这个项目也就没有存在的意义了
|
30
heimeil 2017-01-06 00:43:26 +08:00
目前发现三点:
一、将 python 翻译成 Go 的时候会把线程翻译成 goroutine ,这样线程就非常轻量了。 二、 python 里面可以直接调用 Go 的标准库, from __go__.net.http import ListenAndServe , python 的库就更丰富了。 三、翻译成 Go ,可以用 Go 的跨平台编译特性,直接编译成不同平台的二进制文件,易于分发。 |