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」。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python转go_如何看待将Python代码转换成Go代码并进一步编译的 Grumpy 项目?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 将字符串最后一个字符给替换_一步
- 下一篇: lda 可以处理中文_LDA数学八卦索引