比CPython更快的Python實現:Medusa
原文 http://www.infoq.com/cn/news/2015/01/medusa-cpython-python
作為一種解釋型語言,Python有優點,也有缺點。它簡單靈活,但編寫大型軟件時,其執行速度會低于其它原生/JIT語言。 Medusa 項目的目標就是要克服Python的這一缺點,提供功能更強大、執行速度更快的Python。
該項目基于Dart虛擬機,用Qt/C++、Python和Dart實現。它不僅為Python提供了一個更快的執行環境,而且還保持著 Python原有的靈活性。Medusa將Python代碼實時編譯成Dart代碼,然后由Dart虛擬機直接編譯成機器代碼,總共包括如下六個步驟:
- 將Python源文件分解成標記;
- 將步驟1生成的標記解析成一棵抽象語法樹,同時檢查錯誤;
- 遍歷樹,在每個節點生成等價的Dart代碼并優化;
- 將代碼緩存在持久性存儲SQLite3數據庫中;
- 使用Dart代碼調用Dart虛擬機;
- 緩存生成的機器代碼并輸出。
相應地,其架構圖如下:
與CPython相比,通過Medusa生成的代碼要快10~15倍。而且,Dart虛擬機的一些特性進一步豐富了Python的功能,開發人員可以用它做更多的事情。比如,項目主要開發人員 Rahul De舉了一個小例子 ,涉及代碼如下:
sayHello() def sayHello(): print "Hello"
這樣的代碼在CPython中會無法執行,因為sayHello()函數在定義之前被調用了。但Medusa可以找到函數定義,并生成Dart代碼。
先前也有類似的項目,比如谷歌的實驗性項目 Shed Skin 就試圖將隱式靜態類型的Python程序編譯成C++代碼,但它對輸入的代碼有諸多限制。而Medusa項目的目標是運行已有的Python代碼,而又不需要或者只需要很小的修改。
該項目由來自在線電子商務平臺解決方案提供商MartMobi Technologies的Rahul De開源,遵循BSD 3-Clause許可協議。要了解更多信息,可以閱讀 項目文檔 。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!