polarphp 0.0.1 alpha 发布:全新 PHP 运行时环境

栏目: PHP · 发布时间: 5年前

内容简介:简单来说项目官网库:

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

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

项目官网库:

github.com/polarphp/po…

gitee.com/polarphp/po…

欢迎小伙伴们多多star ^ _ ^

为什么发起 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 大致架构

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

  1. polarvm

  2. zendAPI

  3. libpdk

这个模块大致的关系如下:

polarvm <=> zendAPI <=> libpdk

polarvm 介绍

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

  1. 语言解析, OPCODE 的执行。

  2. 实现基础运行环境,实现变量操作,数组操作,类加载机制,语言反射等等。

  3. zend engine 的初始化,实现语言引擎与终端的链接,实现语言引擎对标准输入输出的直接控制。

  4. 实现语言引擎与标准库之间的回调机制。

zendAPI 介绍

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

如果我们的标准库如果直接基于原生的 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 那样的轻量级的服务框架更加方便,底层基于事件循环模型和多线程模型。

项目库地址: github.com/polarphp/li…

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 操作系统上稳定的运行。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

注意力商人

注意力商人

吳修銘 / 黃庭敏 / 天下雜誌 / 2018-4-2 / NT$650

電子郵件,免費!照片分享,無上限! 你是否想過,隨手可得的免費內容、便利的免費服務,到底都是誰在付費? 如果商品免費,那你就不是消費者,而是商品! 你我可能都不知不覺地把自己賣給了注意力商人! 「『媒體轉型、網路演化與資訊浪潮」此一主題最具洞見的作者。』──黃哲斌(資深媒體人) 「這是少有的關注產業發展的傳播史,對現在或未來的『注意力產業』」中人來說,不可不讀。」──......一起来看看 《注意力商人》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换