PHP7效能提升之後的思考

TP_funny發表於2015-03-05

Mattsah的觀點:

對解釋型語言來說,有用語言本身來重寫這門語言的其他例項麼?我認為即使有這樣的例項,在這個環境下,這門語言的某些部分必定是不可用的。

Otterfan:
最經典的例項就是PyPy,這是一個用RPython(Python的一個子集)寫出來的Python直譯器和實時編譯器。

Mattsah:
雖然對Python不是很熟悉,但我不得不考慮下(如有誤歡迎更正),這樣一來它的動態效能或者說某些特性是不是會受到限制?

Otterfan:
實際上並沒有。它基本上能與Python 2.7.8和Python 3.2.5相容,甚至它有時候比規範的Python(CPython)執行的還要快。
實際上的過程是這樣的:Rpython通過PyPy的RPython工具鏈被翻譯成C版本,然後這個C版本被編譯為二進位制機器碼,接著使用者層的Python就會執行在這個二進位制機器碼上。你當然也可以在規範的CPython直譯器之上來執行PyPy直譯器,不過這樣子PyPy會執行的很慢。
PyPy同樣也是一個實時編譯器,這才是PyPy通常能產生出甚至比CPython還要快的程式碼的真正原因,代價只是啟動的時候稍微有點延遲。PHP則不會有像Python Web開發的這個缺點,因為Python Web應用是一次性就全部啟動並開始執行,而不是像PHP一樣響應每個請求才開始逐步啟動。
 Chippiewall的觀點:
你不可能在沒有一個直譯器來執行的前提下寫出一個解釋型語言的直譯器。

Ircmaxell的評論:
這個觀點嚴格意義上是不對的。
另外更正一點,PHP並不是一門解釋型語言,而是一門編譯型語言。
明白了這一點,就很不一樣了。是的,編譯器並不會產生出原生的機器碼,但還是存在這麼一個編譯器的。並且虛擬機器使用的每個單獨的操作在理論上都會被產生的機器碼所代替。看看Zend’s “JIT”編譯器吧,它根本就不是一個實時編譯器,而是一個AOT編譯器。很準確地說,它能產生出原生的機器碼而不是虛擬機器程式碼(但有相同的語義)。
所以如果拿一個用PHP(Recki-CT或PHPPHP)寫的編譯器,我們是能夠用它來編譯自身的。這就意味著,只要我們引導它一次,我們就不再需要“編譯器”(虛擬機器)了。
所以,Chippiewall的觀點是不對的。

原文:http://www.reddit.com/r/PHP/comments/2xlayg/ask_php_with_improved_speed_of...
譯文:http://www.php100.com/html/dujia/2015/0303/8694.html
(翻譯:PHP100_Alex) 
來自:PHP100
相關閱讀
評論(2)

相關文章