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