標籤:

如何看待PHP成為.NET的一門編程語言?

.NET Core 已經實現了PHP JIT,現在PHP是.NET上的一門開發語言


PHP的非官方實現多得去了,PeachPie(.NET)只不過是又一個而已.

非官方的PHP實現中,Facebook的HHVM是整體上兼容性最好,性能最高的版本.

至於Phalanger(.NET)和Quercus(Java),且不說兼容性,性能很多時候連PHP5都不如,更別提跟PHP7比了.

下圖是PHP及其JIT分支和其他實現的bench.php性能測試對比:

再看看PHP7和HHVM的計算性能對比測試:

Ubuntu 14.04 (i5-3230M)

HHVM 3.18 vs PHP 7.1 壓力測試:

time hhvm php-src/Zend/bench.php 耗時 0.882s

time php php-src/Zend/bench.php 耗時 0.961s

time hhvm php-src/Zend/micro_bench.php 耗時 4.611s

time php php-src/Zend/micro_bench.php 耗時 3.934s

time hhvm php-src/ext/hash/bench.php 耗時 13.635s

time php php-src/ext/hash/bench.php 耗時 15.134s

可見,計算性能上,沒有JIT的PHP7已經跟有JIT的HHVM伯仲之間.

所以說計算性能上,最值得期待的仍然是PHP官方的JIT實現.

php-src/Zend/bench.php 測試中,PHP JIT分支的計算速度是PHP 5.4的10倍,相比PHP7則仍有50%的性能提升.

再拿無JIT的PHP7跟Google吹得牛逼轟轟V8 JIT驅動的Node來比比.生成一個包含100萬個元素的關聯數組(字典/映射),PHP7的耗時僅為Node7的1/3,就連PHP5都比Node7要快.測試內容主要包含時間戳獲取,字元串拼接,關聯數組生成這幾個開發中經常用到的操作.

注:把Object換成Map(ES6)後,Node仍然比PHP5.4慢,更別提跟PHP7比了.

所以,不要再說PHP慢了,就算沒有JIT,PHP7再配上Swoole這台非同步引擎,也一樣能快到你懷疑人生.還有,其他語言也別浪費心思重新實現一次PHP了,就算你像Facebook那樣有財力和人力,也是浪費精力.

最後,我好奇的是,既然PeachPie聲稱自己能驅動WordPress,那為什麼不拿WordPress進行測試呢?

https://www.peachpie.io/2017/02/wordpress-announcement.html

還有,為什麼不拿PHP項目提供好的性能測試腳本bench.php/micro_bench.php進行測試呢?

不會是專門挑一些自己有優勢的點來嘩眾取寵吧.


Peachpie是一個基於Microsoft的Roslyn的現代PHP編譯器,並從我們廣受歡迎的** Phalanger **項目中獲取。它允許PHP在.NET框架內運行,從而為PHP開發人員打開了.NET的大門 - 反之亦然。該項目的目標是將遺留的PHP代碼編譯成可移植的類庫,使開發人員能夠快速,輕鬆地為Microsoft平台構建跨平台的應用程序和庫。

這貨的目標是讓PHP的類庫能在.Net平台下運行,反之亦然,理論上是一個雙贏的局面,但問題在於:

.Net開發人員並不了解PHP有哪些庫可以用,反之亦然

兩者的語法差別非常大,你要讓一個.Net開發人員適應PHP語法估計需要不小的時間,反之亦然

PHP真有什麼完全無法替代的殺手級應用需要.Net開發人員花時間去研究嗎?PHP那邊也可以問出同樣的問題。

因此我並不會覺得會有.Net開發人員騰出時間去研究這個架子,反之亦然。

最後,性能一般都不會成為技術選型的首要判斷標準,不然python根本就不可能成為現在AI的首選語言。

結論:

尷尬。


這件事對PHP好像並不算什麼好新聞,畢竟已經有兩個成熟的運行時了,再加一個.net core,累。

不過PHP真的帶上了.Net那套運行時對象模型的話,能搞的騷東西就多了。

一個建議就是早點靜態類型化吧,以及,早點實現LSP。


判斷標準:

1、是否是官方實現,官方實現意味著會得到全面、長足的支持的可能性比較大(當然不排除官方最後也自宮了,比如Sliverlight(.net)/EJB(Java)/Flash(Adobe));

2、最終達到的效果和接受的程度,比如很多在Java中很火的框架有人在.NET或者其它語言中實現了,但是開發人員不一定接受,最終前景也不會怎麼樣;

就目前來說,在JVM上有不少其它實現,如Scala/JPython/Groovy等,在CLR上也有不少其它語言實現,如IPythond/Delphi/C++.net等,但這些語言有的發展多年,用的人並不多。跟C++/Delphi/Python這類離開了實現平台還可以依然運行不同,Scala可以說是不能離開JVM的,雖然比Java有一定優點,但用的人還是不多。

你給那些PHP開發人員一個必須在.NET上使用PHP的理由?跨平台?PHP早就是跨平台的了;用C#中的類庫,PHP中本身就有大量的類庫了,也支持對象。

所以,我個人感覺缺乏充分的理由,當然,一家之言。


正如高票答案所說,早有jvm上的PHP實現,之所以沒流行,其實還是PHP以及這些平台的定位問題。

PHP本身其實有很多糟粕,比如經常被吐槽的命名不一致,語法糟糕,以及沒有內置的庫組織載入方式。之所以流行,是因為快速開發的高效率,以及部署維護非常方便簡單,還有向下兼容性做得比較好。

而這些平台上的PHP實現,會或多或少丟失PHP的優點,比如兼容性,部署的簡易性等。同時為了兼容PHP應用,還得實現PHP那些糟糕的東西。

能想到的用途,一則是為了移植現有應用,二則是為了開發和運維順手,三則是為了調用平台上的庫。但是第二點其實是說不通的,因為一個開發者學習另外一個開發工具並沒有那麼難,同時如果使用了基於這些平台的PHP實現,需要或多或少對這些平台有一些了解,不然不足以應付遇到的問題。比如調試工具以及配置可能都會和c實現有所差別。而針對第一點移植現有應用,其實現在PHP7現在已經很完善了,性能也不錯,移植到其他平台的意義不是特別大。而且PHP作為主要在web上應用的語言,利用平台上豐富的資源也只是錦上添花,意義沒想像中那麼大。

我覺得這種基於某個vm平台的語言,應該是對平台上現有語言有補充或者改善了使用體驗,才有存在的價值。比如jvm的jruby,scala之類的,其實jvm上有一大堆語言實現,但知名的也就那麼幾個罷了。

而且作為一個不熟悉.net的人來說,現在開源的這些 .net 組件,在伺服器的linux環境下,部署起來比java環境麻煩多了。雖然對f#很感興趣,但是對於.net這個平台的發展還是持謹慎態度。


挺好的。多一種實現,多一種選擇。


從結果看,對雙方來說基本都沒什麼意義……

本來就是在不同的平台各自玩的,你說打通了又有什麼用?

比如某人在Linux上做了個windows虛擬機,然後大聲喊叫「Linux下也可以用windows了!Holy high!」

聽眾只會回答一聲:「切!」

.NET也就是用這種標題黨性質的口號來刷一下存在感而已。


只是一個第三方實現而已,並沒什麼實際意義


說php直接實現在系統層面上的那些人是搞笑,從解釋語言到系統永遠要經過一些步驟的,只不過那些步驟放在哪裡的問題,除非你直接編譯成機器碼,結果這麼多人給那個瞎扯的理論點贊,現在博客園的水平真是差勁。

而且在.net上搞開發全叫.net開發,用啥語言不重要,既然目的是優化性能,相信最終性能還是可以提高的。


我看你們兩個才是在搞笑:

.NET一年不如一年,也只能高點這種噱頭了


推薦閱讀:

怎麼看待.net core 2.0發布?
為什麼大名鼎鼎的Spring在.NET平台上無以為繼?

TAG:PHP | ASPNET | NETCore |