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

图片描述

polarphp 项目介绍

polarphp是一个全新的PHP语言的运行时环境,基于目前最新的zend virtual machine进行打造,支持最新的语言规范,同时提供了本身的运行时标准库 (libpdk)。php

简单来讲polarphp之于PHP语言的关系跟NodeJS之于Javascript语言同样,NodeJSv8引擎基础之上进行打造,为Javascript提供了一个在服务端运行的环境。一样polarphp也在zend engine的基础上进行打造,实现了一个除Web开发以外的一个全新的运行环境。git

为何发起 polarphp 项目

随着GoNodeJS的强势崛起,PHP的市场份额逐渐被蚕食,而PHP官方仍然坚守在Web编程领域,有些东西越是想守住就越守不住。polarphp借鉴NodeJSGo的相关特性对zendVM从新封装,去掉PHP一些古老弃用的特性和强Web属性,经过实现一套新的运行时框架libpdk,将PHP语言打形成为一门真正的通用性脚本语言,赋能PHP,让其拥有异步编程,协程,线程,内置的unicode支持,标准的文件IO等等特性,让PHP程序员不只仅能作web应用,也能从容面对真正的服务端应用。程序员

polarphp 提供的基础设施

  1. 直接面向终端,去掉SAPI从而更好的实现服务端环境。
  2. 规范化OPCODE造成规范,从而提供一种相似pyc文件的预编译机制。
  3. 提供原生多线程支持,借鉴Java在多线程方面的编程范式。
  4. 提供原生异步IO支持。
  5. 提供针对字符串的unicode支持。
  6. 提供一种全新的包组织方式,内置包依赖管理工具,相似Cargonpm
  7. 提供内置的API文档生成工具。

polarphp 大体架构

项目主要由三部分构成,主要有以下三个子模块github

  1. polarvm
  2. zendAPI
  3. libpdk

这个模块大体的关系以下:web

polarvm <=> zendAPI <=> libpdk

polarvm 介绍

现阶段实现对zend engine的封装,实现最基本的PHP执行环境,好比实现:docker

  1. 语言解析,OPCODE的执行。
  2. 实现基础运行环境,实现变量操做,数组操做,类加载机制,语言反射等等。
  3. zend engine的初始化,实现语言引擎与终端的连接,实现语言引擎对标准输入输出的直接控制。
  4. 实现语言引擎与标准库之间的回调机制。

zendAPI 介绍

作过PHP扩展的朋友应该知道,在咱们开发扩展的时候,zend engine的不少接口都是经过宏调用的方式提供的,类型不安全,出错了很差调试,并且有些宏还长的特别像,同时操做数组的时候特别繁琐。zend enginegc是经过引用计数实现的,同时C语言又没有什么从语言层面帮咱们管理计数的机制,从而咱们在写扩展的时候管理内存不只很繁琐并且一不当心就会形成内存泄露。特别是将写时复制和PHP变量之间的引用一块儿使用的时候,很是让能头痛。npm

若是咱们的标准库若是直接基于原生的zend engine的接口,势必扩展性,可维护性会受到严重影响,特别是目前polarvm是基于zend engine二次开发的可观状况下。因此在语言引擎和标准库之间实现一个屏蔽层,对下实现对zend engine原生接口的封装,对上提供一套相对稳定且简单的面向对象的CPP编程接口。编程

zendAPI 提供以下的特性:

  1. 彻底面向对象,对Zend Engine API进行二次定义
  2. 使用现代的C++11语法进行开发,便于维护
  3. 最大化屏蔽PHP版本对扩展开发的影响,zendAPI将对Zend Engine API不一样版本带来的差别屏蔽掉
  4. 高覆盖的单元测试,保证代码质量
  5. 在封装的时候,尽最大能力保证性能
  6. 致力于项目库的二进制兼容

libpdk 介绍

libpdk 的定位是polarphp语言环境中的标准库,PDKPHP Development Kit几个单词的缩写。在设计上参考JavaJDK的模块组织风格,为PHP提供一套严谨而且功能强大的运行时标准库,让实现服务端高效编程成为可能,好比使用PHP实现相似Netty那样的事件驱动的网络框架,或者CoreDNS那样的应用项目成为可能。同时也可让开发终端程序好比npmCargoPM2等等相似的程序更加便捷。在Web领域,libpdkpolarphp可以脱离SAPI直接像go那样本身对端口进行监听,从而实现gin那样的轻量级的服务框架更加方便,底层基于事件循环模型和多线程模型。ubuntu

项目库地址: https://github.com/polarphp/l...centos

PDK计划了以下几个模块

  • Base module (基础模块,实现最基本的功能,好比输入输出,文件系统,进程与线程,事件模型等等)
  • Network module(网络模块,在基础模块之上,实现一套高性能的网络框架,让编写服务端系统更加便捷)
  • Web module (Web模块,实现常见的Http协议,提供一个类型SerletWeb运行时容器)
  • GUI module (用户界面模块,将来实现,让PHP具有编写常见的客户端系统,基于openGL实现)

polarphp 的开发计划

由于开发资源有限,开发计划暂定以下:

  1. 使用cmakezend VM进行编译,生成polarphp定制版的PHP语言虚拟机。
  2. 语言支持项目,语言测试框架,移植LLVM项目的lit测试框架。
  3. 实现polarphp驱动程序,实现从命令行执行PHP代码。
  4. polarphp虚拟机进行回归测试,暂定跑通PHP的语言虚拟机相关回归测试。
  5. 实现polarphp的内置函数。
  6. 发布核心虚拟机的docker镜像。
  7. 整合libpdk运行时框架。
  8. 实现人性化安装,尽可能以最少的步骤进行polarphp的安装。
  9. 实现包管理器。
  10. 实现语言配套小工具,好比文档生成工具等等。

polarphp 优先支持的操做系统

  • debain
  • centos
  • ubuntu
  • openSUSE
  • macOS

将来打算原生支持Windows操做系统,目前正在进行知识储备。

polarphp 目前的现状

目前项目处于一个很是前期的阶段,经过docker镜像来实现项目的迭代发布,目前主要是我一我的在业余时间进行开发,欢迎你们一块儿玩。2019年一个重要的任务就是完善polarphp标准库libpdk,以及实如今主流的Linux操做系统上稳定的运行。

如何参与

目前咱们暂时只针对中国的用户,因此采用了微信群的交流方式:
微信号:zzu_xiuxiu

目前有如下工做组

  1. 语言核心团队
  2. 标准库团队
  3. 生态链项目团队
  4. 文档团队
  5. 官方网站维护团队
相关文章
相关标签/搜索