内容简介:简单来说项目官网库:
polarphp
是一个全新的 PHP
语言的运行时环境,基于目前最新的 zend virtual machine
进行打造,支持最新的语言规范,同时提供了自己的运行时标准库 ( libpdk
)。
简单来说 polarphp
之于 PHP
语言的关系跟 NodeJS
之于 Javascript
语言一样, NodeJS
在 v8
引擎基础之上进行打造,为 Javascript
提供了一个在服务端运行的环境。同样 polarphp
也在 zend engine
的基础上进行打造,实现了一个除 Web
开发之外的一个全新的运行环境。
项目官网库:
欢迎小伙伴们多多star ^ _ ^
为什么发起 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 <=> libpdk
polarvm 介绍
现阶段实现对 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
那样的轻量级的服务框架更加方便,底层基于事件循环模型和多线程模型。
项目库地址: github.com/polarphp/li…
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
操作系统上稳定的运行。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- polarphp 0.0.1 alpha 发布:全新 PHP 运行时环境
- 优麒麟 17.10 正式版发布,全新风格&全新体验!
- 全新设计的 Xcode 12
- YOYOW全新官网上线
- 全新版本网易云音乐来啦
- 全新算法助机器学习抵抗干扰
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。