比CPython更快的Python實現:Medusa

jopen 9年前發布 | 18K 次閱讀 Medusa Python開發

原文  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虛擬機直接編譯成機器代碼,總共包括如下六個步驟:

  1. 將Python源文件分解成標記;
  2. 將步驟1生成的標記解析成一棵抽象語法樹,同時檢查錯誤;
  3. 遍歷樹,在每個節點生成等價的Dart代碼并優化;
  4. 將代碼緩存在持久性存儲SQLite3數據庫中;
  5. 使用Dart代碼調用Dart虛擬機;
  6. 緩存生成的機器代碼并輸出。

相應地,其架構圖如下:

比CPython更快的Python實現:Medusa

與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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!