当前位置: 首页 > 后端技术 > PHP

polarphp:一个全新的PHP语言运行环境

时间:2023-03-29 23:24:43 PHP

polarphp项目介绍polarphp是一个全新的PHP语言运行环境,基于最新的zend虚拟机构建,支持最新的语言规范,并提供了自己的运行时标准库(libpdk).简单来说,polarphp与PHP语言的关系就如同NodeJS与Javascript语言的关系一样。NodeJS建立在v8引擎的基础上,为Javascript在服务端运行提供了环境。同样,polarphp也是建立在zendengine的基础上,实现了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的总体架构主要由三部分组成。它主要有以下三个子模块:polarvmzendAPIlibpdk,比如实现:语言分析,OPCODE执行。实现基本运行环境,实现变量操作、数组操作、类加载机制、语言反射等。zend引擎的初始化实现了语言引擎与终端的链接,实现了语言引擎对标准输入输出的直接控制。实现语言引擎和标准库之间的回调机制。ZendAPI介绍做过PHP扩展的朋友应该知道,我们在开发扩展的时候,zend引擎的很多接口都是通过宏调用来提供的。类型不安全,出错了很难调试,而且有的宏很长。比如,同时操作数组的时候特别麻烦。zend引擎的gc是通过引用计数来实现的,而C语言没有任何机制从语言层面帮助我们管理计数,所以我们在写扩展的时候不仅管理内存很麻烦,而且如果我们写扩展的话还会造成内存泄漏不小心。尤其是在PHP变量之间使用写时复制时,这会让人非常头疼。如果我们的标准库直接基于原生的zendengine接口,扩展性和可维护性会受到严重影响,尤其是目前polarvm是基于zendengine二次开发的。因此在语言引擎和标准库之间实现了一个屏蔽层,实现了对zend引擎原生接口的封装,提供了一套相对稳定简单的面向对象的CPP编程接口。zendAPI提供了以下特点:完全面向对象,二次定义ZendEngineAPI,使用现代C++11语法开发,方便维护,最大限度屏蔽PHP版本对扩展开发的影响。ZendAPI会支持不同版本的ZendEngineAPI带来的差异,屏蔽高覆盖率的单元测试,保证代码质量。打包时尽量保证性能。致力于项目库的二进制兼容性libpdk简介libpdk定位为polarphp语言环境下的标准库,PDK是PHPDevelopmentKit几个单词的缩写。在设计上,参考了Java的JDK的模块组织风格,为PHP提供了一套严谨而强大的运行时标准库,使得实现高效的服务器端编程成为可能,比如利用PHP实现一个事件驱动的像Netty这样的网络框架,或者像CoreDNS这样的应用项目成为可能。同时也可以更方便的开发npm、Cargo、PM2等终端程序。在Web领域,libpdk允许polarphp像go一样不用SAPI直接监听端口,这样更方便实现类似gin的轻量级服务框架,底层基于事件循环模型和多线程模型。项目库地址:https://github.com/polarphp/l...PDK规划了以下模块Basemodule(基础模块,实现最基本的功能,如输入输出、文件系统、进程和线程、事件modeletc.)Networkmodule(网络模块,在基础模块的基础上,实现了一套高性能的网络框架,使得编写服务器系统更加简单)Webmodule(Web模块,实现了常用的Http协议,并提供了一种SerletWebRuntime容器)GUI模块(用户界面模块,未来实现,使PHP能够编写通用客户端系统,基于openGL)polarphp开发计划由于开发资源有限,开发计划暂定如下:使用cmake编译zendVM,生成一个polarphp定制版的PHP语言虚拟机。语言支持项目,语言测试框架,移植LLVM项目的lit测试框架。实现polarphp驱动程序以从命令行执行PHP代码。在polarphp虚拟机上进行回归测试,初步跑通PHP语言虚拟机相关的回归测试。实现polarphp的内置函数。发布核心虚拟机的docker镜像。集成libpdk运行时框架。为实现人性化安装,尽量以最少的步骤安装polarphp。实施包管理器。实现语言支持的小工具,比如文档生成工具等等。polarphp首先支持的操作系统debaincentosubuntuopenSUSEmacOS打算以后原生支持Windows操作系统,目前正在进行知识储备。polarphp的当前状态当前项目处于非常早期的阶段。通过docker镜像实现项目的迭代发布。目前主要是业余时间开发。欢迎大家一起来玩。2019年的一个重要任务是完善polarphp标准库libpdk,实现在主流Linux操作系统上的稳定运行。如何参与目前我们暂时只针对中国用户,所以我们采用微信群的交流方式:微信号:zzu_xiuxiu目前有以下工作群语言核心团队标准库团队生态链项目团队文档团队官方网站维护团队

最新推荐
猜你喜欢