|
| 1 | +--- |
| 2 | +title: polarphp 项目简单介绍 |
| 3 | +date: 2019-12-22 00:11:38 |
| 4 | +tags: |
| 5 | +--- |
| 6 | +### 为什么要做 polarphp 项目 |
| 7 | + |
| 8 | +随着`Go`和`NodeJS`的强势崛起,`PHP`的市场份额逐渐被蚕食,而`PHP`官方仍然坚守在`Web`编程领域,有些东西越是想守住就越守不住。`polarphp`借鉴`NodeJS`和`Go`的相关特性对`zendVM`重新封装,去掉`PHP`一些古老弃用的特性和强`Web`属性,通过实现一套新的运行时框架`libpdk`,将`PHP`语言打造成为一门真正的通用性脚本语言,赋能`PHP`,让其拥有异步编程,协程,线程,内置的`unicode`支持,标准的文件`IO`等等特性,让`PHP`程序员不仅仅能做`web`应用,也能从容面对真正的服务端应用。`polarphp`不是一门新的语言,而是`PHP`语言的除官方外的一个新的编译器及其运行时。 |
| 9 | + |
| 10 | +### 主要特性 |
| 11 | + |
| 12 | +- [ ] 兼容最新的`PHP`语言标准,移除废弃语言特性 |
| 13 | +- [ ] 内置`unicode`字符标准支持 |
| 14 | +- [ ] 全功能型运行时库支持,支持异步编程,多线程和协程等等编程模式 |
| 15 | +- [ ] 内置包管理器 |
| 16 | +- [ ] 内置文档生成器 |
| 17 | + |
| 18 | +### 开发计划 |
| 19 | + |
| 20 | +因为开发资源有限,开发计划暂定如下: |
| 21 | + |
| 22 | +1. 实现自己的`PHP`编译器前端 |
| 23 | +2. 语言支持项目,语言测试框架,移植`LLVM`项目的`lit`测试框架 |
| 24 | +3. 使用`phplit`回归测试框架完成对`polarphp`编译器前端的测试 |
| 25 | +4. 定义`polarvm`的指令集,完成虚拟机的基础架构 |
| 26 | +5. 实现完整的虚拟机规范的指令集 |
| 27 | +6. 完成`polarphp` AST 到指令集的编译,暂时不定义 IR 层 |
| 28 | +7. 使用`phplit`对语言结构到指令集所有编译模块的测试 |
| 29 | +8. 实现一个最小化的运行时,暂时使用`PHP`内置的`GC` |
| 30 | +9. 实现`PHP`语言标准库`libpdk`的底层架构 (`cpp`部分) |
| 31 | +10. 实现人性化安装,尽量以最少的步骤进行`polarphp`的安装 |
| 32 | +11. 实现包管理器 |
| 33 | +12. 实现语言配套小工具,比如文档生成工具等等 |
| 34 | +13. 发动社区,实现一个功能完备的`PHP`标准库 (使用`PHP`代码配合`libpdk`底层支持进行实现) |
| 35 | + |
| 36 | +### 开始体验 |
| 37 | + |
| 38 | +#### 克隆 polarphp 项目库 |
| 39 | +``` |
| 40 | +git clone https://github.com/polarphp/polarphp.git |
| 41 | +cd polarphp |
| 42 | +git submodule init |
| 43 | +git submodule update |
| 44 | +git checkout v0.0.1-alpha |
| 45 | +``` |
| 46 | +#### 运行脚本 |
| 47 | +``` |
| 48 | +./devtools/scripts/build_polarphp.sh |
| 49 | +``` |
| 50 | +这个时候脚本开始编译相关镜像,耗时比较长,请您耐心等待。等待编译完成,您运行: |
| 51 | +``` |
| 52 | +docker images |
| 53 | +``` |
| 54 | +这个时候请确认在输出中有如下镜像: |
| 55 | +1. polarphp_base_env |
| 56 | +2. polarphp_debug |
| 57 | + |
| 58 | +如果没有问题,我们开始测试`polarphp`是否在镜像中正常运行。 |
| 59 | +``` |
| 60 | +docker run --rm -it polarphp_debug |
| 61 | +``` |
| 62 | +进入容器后,输入我们的`polarphp`命令行程序 |
| 63 | +``` |
| 64 | +polar --version |
| 65 | +``` |
| 66 | +如果您得到下面的输出: |
| 67 | +``` |
| 68 | +polarphp 0.0.1-git (built: 2019-01-27 12:22) |
| 69 | +Copyright (c) 2016-2018 The polarphp foundation (https://polar.foundation) |
| 70 | +Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies |
| 71 | +``` |
| 72 | +恭喜您,您已经成功编译了`polarphp`运行时环境。 |
| 73 | +在编译镜像的时候,我们在`~/temp/`文件夹中放入了一个测试脚本 |
| 74 | +```php |
| 75 | +if (function_exists('\php\retrieve_version_str')) { |
| 76 | + echo "version str: " . \php\retrieve_version_str() . "\n"; |
| 77 | +} |
| 78 | + |
| 79 | +if (function_exists('\php\retrieve_major_version')) { |
| 80 | + echo "major version: " . \php\retrieve_major_version() . "\n"; |
| 81 | +} |
| 82 | + |
| 83 | +if (function_exists('\php\retrieve_minor_version')) { |
| 84 | + echo "minor version: " . \php\retrieve_minor_version() . "\n"; |
| 85 | +} |
| 86 | + |
| 87 | +if (function_exists('\php\retrieve_patch_version')) { |
| 88 | + echo "patch version: " . \php\retrieve_patch_version() . "\n"; |
| 89 | +} |
| 90 | + |
| 91 | +``` |
| 92 | +您可以运行一下命令: |
| 93 | +``` |
| 94 | +polar ~/temp/main.php |
| 95 | +``` |
| 96 | +如果没有错误,您将得到下面的输出: |
| 97 | +``` |
| 98 | +version str: polarphp 0.0.1-git |
| 99 | +major version: 0 |
| 100 | +minor version: 0 |
| 101 | +patch version: 1 |
| 102 | +``` |
| 103 | +感谢您测试`polarphp`,有什么问题,请扫描下面的微信二维码进群交流。 |
| 104 | + |
| 105 | +### 社区 |
| 106 | +目前我们暂时只针对中国的用户,所以采用了微信和`QQ`群的交流方式,下面是二维码,有兴趣的同学可以扫码加入: |
| 107 | + |
| 108 | +> PS:扫码请注明来意,比如:学习`polarphp`或者`PHP`爱好者 |
| 109 | +
|
| 110 | +#### 目前有以下工作组 |
| 111 | + |
| 112 | +1. 语言核心团队 |
| 113 | +2. 标准库团队 |
| 114 | +3. 生态链项目团队 |
| 115 | +4. 文档团队 |
| 116 | +5. 官方网站维护团队 |
| 117 | + |
0 commit comments