歡迎您光臨本站 註冊首頁

PHP7性能提升之後的思考

←手機掃碼閱讀     admin @ 2015-09-17 , reply:0

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)

[admin ] PHP7性能提升之後的思考已經有518次圍觀

http://coctec.com/docs/program/show-post-204815.html