摘要:項(xiàng)目介紹是一個(gè)全新的語(yǔ)言的運(yùn)行時(shí)環(huán)境,基于目前最新的進(jìn)行打造,支持最新的語(yǔ)言規(guī)范,同時(shí)提供了自己的運(yùn)行時(shí)標(biāo)準(zhǔn)庫(kù)。同樣也在的基礎(chǔ)上進(jìn)行打造,實(shí)現(xiàn)了一個(gè)除開(kāi)發(fā)之外的一個(gè)全新的運(yùn)行環(huán)境。發(fā)布核心虛擬機(jī)的鏡像。整合運(yùn)行時(shí)框架。
polarphp 項(xiàng)目介紹
polarphp是一個(gè)全新的PHP語(yǔ)言的運(yùn)行時(shí)環(huán)境,基于目前最新的zend virtual machine進(jìn)行打造,支持最新的語(yǔ)言規(guī)范,同時(shí)提供了自己的運(yùn)行時(shí)標(biāo)準(zhǔn)庫(kù) (libpdk)。
簡(jiǎn)單來(lái)說(shuō)polarphp之于PHP語(yǔ)言的關(guān)系跟NodeJS之于Javascript語(yǔ)言一樣,NodeJS在v8引擎基礎(chǔ)之上進(jìn)行打造,為Javascript提供了一個(gè)在服務(wù)端運(yùn)行的環(huán)境。同樣polarphp也在zend engine的基礎(chǔ)上進(jìn)行打造,實(shí)現(xiàn)了一個(gè)除Web開(kāi)發(fā)之外的一個(gè)全新的運(yùn)行環(huán)境。
為什么發(fā)起 polarphp 項(xiàng)目隨著Go和NodeJS的強(qiáng)勢(shì)崛起,PHP的市場(chǎng)份額逐漸被蠶食,而PHP官方仍然堅(jiān)守在Web編程領(lǐng)域,有些東西越是想守住就越守不住。polarphp借鑒NodeJS和Go的相關(guān)特性對(duì)zendVM重新封裝,去掉PHP一些古老棄用的特性和強(qiáng)Web屬性,通過(guò)實(shí)現(xiàn)一套新的運(yùn)行時(shí)框架libpdk,將PHP語(yǔ)言打造成為一門真正的通用性腳本語(yǔ)言,賦能PHP,讓其擁有異步編程,協(xié)程,線程,內(nèi)置的unicode支持,標(biāo)準(zhǔn)的文件IO等等特性,讓PHP程序員不僅僅能做web應(yīng)用,也能從容面對(duì)真正的服務(wù)端應(yīng)用。
polarphp 提供的基礎(chǔ)設(shè)施直接面向終端,去掉SAPI從而更好的實(shí)現(xiàn)服務(wù)端環(huán)境。
規(guī)范化OPCODE形成規(guī)范,從而提供一種類似pyc文件的預(yù)編譯機(jī)制。
提供原生多線程支持,借鑒Java在多線程方面的編程范式。
提供原生異步IO支持。
提供針對(duì)字符串的unicode支持。
提供一種全新的包組織方式,內(nèi)置包依賴管理工具,類似Cargo和npm。
提供內(nèi)置的API文檔生成工具。
polarphp 大致架構(gòu)項(xiàng)目主要由三部分構(gòu)成,主要有如下三個(gè)子模塊
polarvm
zendAPI
libpdk
這個(gè)模塊大致的關(guān)系如下:
polarvm <=> zendAPI <=> libpdkpolarvm 介紹
現(xiàn)階段實(shí)現(xiàn)對(duì)zend engine的封裝,實(shí)現(xiàn)最基本的PHP執(zhí)行環(huán)境,比如實(shí)現(xiàn):
語(yǔ)言解析,OPCODE的執(zhí)行。
實(shí)現(xiàn)基礎(chǔ)運(yùn)行環(huán)境,實(shí)現(xiàn)變量操作,數(shù)組操作,類加載機(jī)制,語(yǔ)言反射等等。
zend engine的初始化,實(shí)現(xiàn)語(yǔ)言引擎與終端的鏈接,實(shí)現(xiàn)語(yǔ)言引擎對(duì)標(biāo)準(zhǔn)輸入輸出的直接控制。
實(shí)現(xiàn)語(yǔ)言引擎與標(biāo)準(zhǔn)庫(kù)之間的回調(diào)機(jī)制。
zendAPI 介紹做過(guò)PHP擴(kuò)展的朋友應(yīng)該知道,在我們開(kāi)發(fā)擴(kuò)展的時(shí)候,zend engine的很多接口都是通過(guò)宏調(diào)用的方式提供的,類型不安全,出錯(cuò)了不好調(diào)試,而且有些宏還長(zhǎng)的特別像,同時(shí)操作數(shù)組的時(shí)候特別繁瑣。zend engine的gc是通過(guò)引用計(jì)數(shù)實(shí)現(xiàn)的,同時(shí)C語(yǔ)言又沒(méi)有什么從語(yǔ)言層面幫我們管理計(jì)數(shù)的機(jī)制,從而我們?cè)趯憯U(kuò)展的時(shí)候管理內(nèi)存不僅很繁瑣而且一不小心就會(huì)造成內(nèi)存泄露。特別是將寫時(shí)復(fù)制和PHP變量之間的引用一起使用的時(shí)候,非常讓能頭痛。
如果我們的標(biāo)準(zhǔn)庫(kù)如果直接基于原生的zend engine的接口,勢(shì)必?cái)U(kuò)展性,可維護(hù)性會(huì)受到嚴(yán)重影響,特別是目前polarvm是基于zend engine二次開(kāi)發(fā)的可觀情況下。所以在語(yǔ)言引擎和標(biāo)準(zhǔn)庫(kù)之間實(shí)現(xiàn)一個(gè)屏蔽層,對(duì)下實(shí)現(xiàn)對(duì)zend engine原生接口的封裝,對(duì)上提供一套相對(duì)穩(wěn)定且簡(jiǎn)單的面向?qū)ο蟮?b>CPP編程接口。
zendAPI 提供如下的特性:完全面向?qū)ο螅瑢?duì)Zend Engine API進(jìn)行二次定義
使用現(xiàn)代的C++11語(yǔ)法進(jìn)行開(kāi)發(fā),便于維護(hù)
最大化屏蔽PHP版本對(duì)擴(kuò)展開(kāi)發(fā)的影響,zendAPI將對(duì)Zend Engine API不同版本帶來(lái)的差異屏蔽掉
高覆蓋的單元測(cè)試,保證代碼質(zhì)量
在封裝的時(shí)候,盡最大能力保證性能
致力于項(xiàng)目庫(kù)的二進(jìn)制兼容
libpdk 介紹libpdk 的定位是polarphp語(yǔ)言環(huán)境中的標(biāo)準(zhǔn)庫(kù),PDK是PHP Development Kit幾個(gè)單詞的縮寫。在設(shè)計(jì)上參考Java的JDK的模塊組織風(fēng)格,為PHP提供一套嚴(yán)謹(jǐn)并且功能強(qiáng)大的運(yùn)行時(shí)標(biāo)準(zhǔn)庫(kù),讓實(shí)現(xiàn)服務(wù)端高效編程成為可能,比如使用PHP實(shí)現(xiàn)類似Netty那樣的事件驅(qū)動(dòng)的網(wǎng)絡(luò)框架,或者CoreDNS那樣的應(yīng)用項(xiàng)目成為可能。同時(shí)也可以讓開(kāi)發(fā)終端程序比如npm,Cargo和PM2等等類似的程序更加便捷。在Web領(lǐng)域,libpdk讓polarphp能夠脫離SAPI直接像go那樣自己對(duì)端口進(jìn)行監(jiān)聽(tīng),從而實(shí)現(xiàn)gin那樣的輕量級(jí)的服務(wù)框架更加方便,底層基于事件循環(huán)模型和多線程模型。
項(xiàng)目庫(kù)地址: https://github.com/polarphp/l...
PDK計(jì)劃了如下幾個(gè)模塊
Base module (基礎(chǔ)模塊,實(shí)現(xiàn)最基本的功能,比如輸入輸出,文件系統(tǒng),進(jìn)程與線程,事件模型等等)
Network module(網(wǎng)絡(luò)模塊,在基礎(chǔ)模塊之上,實(shí)現(xiàn)一套高性能的網(wǎng)絡(luò)框架,讓編寫服務(wù)端系統(tǒng)更加便捷)
Web module (Web模塊,實(shí)現(xiàn)常見(jiàn)的Http協(xié)議,提供一個(gè)類型Serlet的Web運(yùn)行時(shí)容器)
GUI module (用戶界面模塊,未來(lái)實(shí)現(xiàn),讓PHP具備編寫常見(jiàn)的客戶端系統(tǒng),基于openGL實(shí)現(xiàn))
polarphp 的開(kāi)發(fā)計(jì)劃因?yàn)殚_(kāi)發(fā)資源有限,開(kāi)發(fā)計(jì)劃暫定如下:
使用cmake對(duì)zend VM進(jìn)行編譯,生成polarphp定制版的PHP語(yǔ)言虛擬機(jī)。
語(yǔ)言支持項(xiàng)目,語(yǔ)言測(cè)試框架,移植LLVM項(xiàng)目的lit測(cè)試框架。
實(shí)現(xiàn)polarphp驅(qū)動(dòng)程序,實(shí)現(xiàn)從命令行執(zhí)行PHP代碼。
對(duì)polarphp虛擬機(jī)進(jìn)行回歸測(cè)試,暫定跑通PHP的語(yǔ)言虛擬機(jī)相關(guān)回歸測(cè)試。
實(shí)現(xiàn)polarphp的內(nèi)置函數(shù)。
發(fā)布核心虛擬機(jī)的docker鏡像。
整合libpdk運(yùn)行時(shí)框架。
實(shí)現(xiàn)人性化安裝,盡量以最少的步驟進(jìn)行polarphp的安裝。
實(shí)現(xiàn)包管理器。
實(shí)現(xiàn)語(yǔ)言配套小工具,比如文檔生成工具等等。
polarphp 優(yōu)先支持的操作系統(tǒng)debain
centos
ubuntu
openSUSE
macOS
未來(lái)打算原生支持Windows操作系統(tǒng),目前正在進(jìn)行知識(shí)儲(chǔ)備。
polarphp 目前的現(xiàn)狀目前項(xiàng)目處于一個(gè)非常前期的階段,通過(guò)docker鏡像來(lái)實(shí)現(xiàn)項(xiàng)目的迭代發(fā)布,目前主要是我一個(gè)人在業(yè)余時(shí)間進(jìn)行開(kāi)發(fā),歡迎大家一起玩。2019年一個(gè)重要的任務(wù)就是完善polarphp標(biāo)準(zhǔn)庫(kù)libpdk,以及實(shí)現(xiàn)在主流的Linux操作系統(tǒng)上穩(wěn)定的運(yùn)行。
如何參與目前我們暫時(shí)只針對(duì)中國(guó)的用戶,所以采用了微信群的交流方式:
微信號(hào):zzu_xiuxiu
語(yǔ)言核心團(tuán)隊(duì)
標(biāo)準(zhǔn)庫(kù)團(tuán)隊(duì)
生態(tài)鏈項(xiàng)目團(tuán)隊(duì)
文檔團(tuán)隊(duì)
官方網(wǎng)站維護(hù)團(tuán)隊(duì)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/30041.html
摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...
摘要:原理啟動(dòng)時(shí)載入進(jìn)程管理器或進(jìn)程管理器自身初始化,啟動(dòng)多個(gè)解釋器進(jìn)程可見(jiàn)多個(gè)并等待來(lái)自的連接。當(dāng)客戶端請(qǐng)求到達(dá)時(shí),進(jìn)程管理器選擇并連接到一個(gè)解釋器。子進(jìn)程接著等待并處理來(lái)自進(jìn)程管理器運(yùn)行在中的下一個(gè)連接。 CGI 簡(jiǎn)介 CGI全稱是通用網(wǎng)關(guān)接口(Common Gateway Interface),是外部應(yīng)用程序與與服務(wù)器之間的接口標(biāo)準(zhǔn),是在CGI程序和web服務(wù)器之間傳遞信息的規(guī)程。 在...
摘要:接下來(lái)會(huì)對(duì)其中五個(gè)比較常見(jiàn)的運(yùn)行模式進(jìn)行說(shuō)明。模式是目前主流的服務(wù)運(yùn)行模式,擁有高效可靠的性能,推薦大家使用。由于微軟的排他性,只能運(yùn)行于環(huán)境。 SAPI 這里所說(shuō)的 PHP 運(yùn)行模式, 其實(shí)指的是 SAPI (Server Application Programming Interface,服務(wù)端應(yīng)用編程端口 )。SAPI 為 PHP 提供了一個(gè)和外部通信的接口, PHP 就是通過(guò)這...
閱讀 3193·2021-11-18 10:02
閱讀 2682·2021-10-13 09:47
閱讀 3171·2021-09-22 15:07
閱讀 906·2019-08-30 15:43
閱讀 1900·2019-08-30 10:59
閱讀 1785·2019-08-29 15:34
閱讀 1794·2019-08-29 15:06
閱讀 520·2019-08-29 13:28