polarphp

The compiler and runtime of PHP programming language

Github stars Tracking Chart

让 PHP 语言变得更加美好

Read the English version of this document: English

阅读本文档其他语言版本: English, 简体中文.

为什么要做 polarphp 项目

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

主要特性

  • 兼容最新的PHP语言标准,移除废弃语言特性
  • 内置unicode字符标准支持
  • 全功能型运行时库支持,支持异步编程,多线程和协程等等编程模式
  • 内置包管理器
  • 内置文档生成器

开发计划

因为开发资源有限,开发计划暂定如下:

  1. 实现自己的PHP编译器前端
  2. 语言支持项目,语言测试框架,移植LLVM项目的lit测试框架
  3. 使用phplit回归测试框架完成对polarphp编译器前端的测试
  4. 定义polarvm的指令集,完成虚拟机的基础架构
  5. 实现完整的虚拟机规范的指令集
  6. 完成polarphp AST 到指令集的编译,暂时不定义 IR 层
  7. 使用phplit对语言结构到指令集所有编译模块的测试
  8. 实现一个最小化的运行时,暂时使用PHP内置的GC
  9. 实现PHP语言标准库libpdk的底层架构 (cpp部分)
  10. 实现人性化安装,尽量以最少的步骤进行polarphp的安装
  11. 实现包管理器
  12. 实现语言配套小工具,比如文档生成工具等等
  13. 发动社区,实现一个功能完备的PHP标准库 (使用PHP代码配合libpdk底层支持进行实现)

开始体验

克隆polarphp项目库

git clone https://github.com/polarphp/polarphp.git
cd polarphp
git submodule init
git submodule update
git checkout v0.0.1-alpha

运行脚本

./devtools/scripts/build_polarphp.sh

这个时候脚本开始编译相关镜像,耗时比较长,请您耐心等待。等待编译完成,您运行:

docker images

这个时候请确认在输出中有如下镜像:

  1. polarphp_base_env
  2. polarphp_debug

如果没有问题,我们开始测试polarphp是否在镜像中正常运行。

docker run --rm -it polarphp_debug

进入容器后,输入我们的polarphp命令行程序

polar --version

如果您得到下面的输出:

polarphp 0.0.1-git (built: 2019-01-27 12:22)
Copyright (c) 2016-2018 The polarphp foundation (https://polar.foundation)
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies

恭喜您,您已经成功编译了polarphp运行时环境。
在编译镜像的时候,我们在~/temp/文件夹中放入了一个测试脚本

if (function_exists('\php\retrieve_version_str')) {
    echo "version str: " . \php\retrieve_version_str() . "\n";
}

if (function_exists('\php\retrieve_major_version')) {
    echo "major version: " . \php\retrieve_major_version() . "\n";
}

if (function_exists('\php\retrieve_minor_version')) {
    echo "minor version: " . \php\retrieve_minor_version() . "\n";
}

if (function_exists('\php\retrieve_patch_version')) {
    echo "patch version: " . \php\retrieve_patch_version() . "\n";
}

您可以运行一下命令:

polar ~/temp/main.php

如果没有错误,您将得到下面的输出:

version str: polarphp 0.0.1-git
major version: 0
minor version: 0
patch version: 1

感谢您测试polarphp,有什么问题,请扫描下面的微信二维码进群交流。

社区

目前我们暂时只针对中国的用户,所以采用了微信和QQ群的交流方式,下面是二维码,有兴趣的同学可以扫码加入:

PS:扫码请注明来意,比如:学习polarphp或者PHP爱好者

目前有以下工作组

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

授权协议

polarphpphp语言项目之上进行二次开发,遵守php项目的协议,详情请看:项目协议

贡献代码引导

===========================

特别感谢

Overview

Name With Ownerpolarphp/polarphp
Primary LanguageC++
Program languageC (Language Count: 8)
Platform
License:Other
Release Count1
Last Release Namev0.0.1-alpha (Posted on )
First Release Namev0.0.1-alpha (Posted on )
Created At2018-07-31 04:23:39
Pushed At2020-02-20 12:43:12
Last Commit At2020-02-20 20:43:03
Stargazers Count1k
Watchers Count56
Fork Count71
Commits Count1.9k
Has Issues Enabled
Issues Count24
Issue Open Count15
Pull Requests Count10
Pull Requests Open Count0
Pull Requests Close Count4
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private
To the top