精華區beta Python 關於我們 聯絡資訊
※ 引述《yoco315 (眠月)》之銘言: : ※ 引述《Jobaba (下雨了)》之銘言: : : 感覺時間差好多喔.. : : 不知道大家覺得為何會差那麼多呢... : Python 本來就是這麼慢的 : 你看一下 Python 的 Extending and Embedding : 看看 Python 底層是怎麼用 C 實作的 : http://docs.python.org/ext/ext.html : 看完就知道會這麼慢是很正常的 其實還好... python 包變數包得的確很沒有空間效率, 但是你是否有注意到大多數的 special member function 都在 type object 裡面有獨立的 entry? (也就是說它們的 binding 不需要 look up) 其實主要會慢還是慢在它的 VM 上面... 這邊稍微提一下 python 的程式是怎麼執行的, 當一支 python module 被讀進記憶體的時候, 它會先被 compile 成 bytecode, 也就是你在 .pyc 裡面看見的東西, 而執行的時候則是用一台 virtual machine 一個一個指令讀進來模擬, 而這是非常沒有效率的. 你可能會想問那為什麼其他的 bytecode virtual machine 沒有那麼慢, 比方說 java 或是 c# 都比 python 快上許多, 甚至 java 的執行效率直逼 native program? 那是因為它們有利用到 JIT(just-in-time compilation) 的技術, 每當執行到一段 bytecode 時, virtual machine 會先把它翻譯成 native code 執行, 而當以後再執行到同一段 bytecode 時, 翻譯的動作就可以省去. python 內建是沒有這樣的機制的, 但我下一段會介紹一個替代品. : 所以 Python 的效能關鍵部分才要用 C 寫的 Module 包裝起來 : 不然用直接在 Python 層次 codding 的話肯定會跑到哭 其實 python 寫得有技巧的話也可以很有效率... 比方說如果你知道 python list 其實就是 array 的話, 你那就不會常常寫 somelist.pop(0) 這樣的東西出來. 至於 bytecode 跑得慢的問題, 其實是有解的: http://psyco.sourceforge.net/ 這支 python module 很有意思, 它所實作的就是 JIT 的功能, 而且它是可以手動調整 profiling 的, 你可以自由設定某些較常執行的 function 才 optimize. --- 另外一個我很看好的東西是這個: http://codespeak.net/pypy/ 這玩意兒將可能是下一代的 python interpreter, 它最大的特色就是它整隻程式都是 python 寫的, 完全脫去了跟其他語言的牽連. 但是這樣會造成一個問題, 就是我們總得有一個 native 的 interpreter, 而 pypy 裡面有個叫 translator 的 module, 它的功能是把 python 的程式轉譯成較低階的語言, 比方說 C 或 LLVM 甚至是組語, 之後便可以再用別的 compiler 把它編譯成 native code. (LLVM 是一種適合 optimize 的語言, 主要用於 compiler 內部表示) translator 有趣的地方在於雖然 python 是一個 weak typing 的語言, 然而事實上正常的 python 程式大多數變數都還是只會擁有單一型別, 它能夠分析程式的 control flow 來進行 compile-time binding, 最後產生出來的 code 則有可能跟其他 strong typing 的語言同樣有效率. 這玩意兒等到實用化了, 我恐怕真的會把精熟的 C++ 忘光完全倒向 python 吧. -- その乾いた哀愁の瞳に去來するものは何か? 失ったもの 得たもの そして廣大なネットの狹間で彼が見たものとは? 虛像と實存と記號の中に彼は今、何を想うのか? <バトルプログラマーシラセ> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.224.64
Jobaba:感謝各位的回答, 我剛入新手, 還要多多看一些文件 :) 02/18 10:14
Jobaba: 才是 02/18 10:18
yoco315:好文章按個好 @@ 02/18 12:58
wawawa:我本來以為python速度比java快說~.~看來是我搞錯了 02/18 23:06
wawawa:希望新一代的interpreter趕快誕生吧^_^ 02/18 23:07