polarphp是一个全新的PHP语言的运行时环境,基于目前最新的zend virtual machine进行打造,支持最新的语言规范,同时提供了自己的运行时标准库 (libpdk)。
简单来说polarphp之于PHP语言的关系跟NodeJS之于Javascript语言一样,NodeJS在v8引擎基础之上进行打造,为Javascript提供了一个在服务端运行的环境。同样polarphp也在zend engine的基础上进行打造,实现了一个除Web开发之外的一个全新的运行环境。
项目官网库:
https://gitee.com/polarphp/polarphp
https://github.com/polarphp/polarphp
欢迎小伙伴们多多star ^ _ ^
随着Go和NodeJS的强势崛起,PHP的市场份额逐渐被蚕食,而PHP官方仍然坚守在Web编程领域,有些东西越是想守住就越守不住。polarphp借鉴NodeJS和Go的相关特性对zendVM重新封装,去掉PHP一些古老弃用的特性和强Web属性,通过实现一套新的运行时框架libpdk,将PHP语言打造成为一门真正的通用性脚本语言,赋能PHP,让其拥有异步编程,协程,线程,内置的unicode支持,标准的文件IO等等特性,让PHP程序员不仅仅能做web应用,也能从容面对真正的服务端应用。
polarphp 大致架构
项目主要由三部分构成,主要有如下三个子模块
这个模块大致的关系如下:
polarvm 介绍
现阶段实现对zend engine的封装,实现最基本的PHP执行环境,比如实现:
zendAPI 介绍
做过PHP扩展的朋友应该知道,在我们开发扩展的时候,zend engine的很多接口都是通过宏调用的方式提供的,类型不安全,出错了不好调试,而且有些宏还长的特别像,同时操作数组的时候特别繁琐。zend engine的gc是通过引用计数实现的,同时C语言又没有什么从语言层面帮我们管理计数的机制,从而我们在写扩展的时候管理内存不仅很繁琐而且一不小心就会造成内存泄露。特别是将写时复制和PHP变量之间的引用一起使用的时候,非常让能头痛。
如果我们的标准库如果直接基于原生的zend engine的接口,势必扩展性,可维护性会受到严重影响,特别是目前polarvm是基于zend engine二次开发的可观情况下。所以在语言引擎和标准库之间实现一个屏蔽层,对下实现对zend engine原生接口的封装,对上提供一套相对稳定且简单的面向对象的CPP编程接口。
zendAPI 提供如下的特性:
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/libpdk
PDK计划了如下几个模块
因为开发资源有限,开发计划暂定如下:
未来打算原生支持Windows操作系统,目前正在进行知识储备。
目前项目处于一个非常前期的阶段,通过docker镜像来实现项目的迭代发布,目前主要是我一个人在业余时间进行开发,欢迎大家一起玩。2019年一个重要的任务就是完善polarphp标准库libpdk,以及实现在主流的Linux操作系统上稳定的运行。