Giter Club home page Giter Club logo

polarphp's Introduction

让 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项目的协议,详情请看:项目协议

贡献代码引导

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

特别感谢

polarphp's People

Contributors

dependabot[bot] avatar mjc199252 avatar normal-coder avatar wujunze avatar zzusoftboy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

polarphp's Issues

无法进入到容器中

docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused "open /dev/ptmx: no such file or directory"": unknown.

./devtools/scripts/build_polarphp.sh

copying docker files ...
checking polarphp base image ...
Sending build context to Docker daemon 3.868MB
Step 1/5 : FROM gcc:8.2.0
Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout
prepare polarphp source files ...
tar project files ...
building polarphp image ...
Sending build context to Docker daemon 3.868MB
Step 1/5 : FROM polarphp_base_env:latest
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

项目目标可以描述得更清晰一些咩?

看readme.md之后,我自己的理解,是要修改php语法?还是在符合标准php的情况下把自己扩展的extension一起打包进默认配置里?

不知道下边这几条,这个项目会做哪些:

  • 修改php基本语法或者删除对某些语法的支持
  • 保持对php流行版本的兼容,并且自己扩展新的核心语法
  • 增加自己开发的extension
  • 修改默认的PHP_INI_SET的配置
  • 生成新的运行界面/SAPI,比如增强版本的php-cli或者dll版本的php runtime
  • 提供访问标准dll/so动态库的接口能力,以便于直接桥接os api和其他语言的runtime

另外想问一句,php7和php5的embed sapi、extension接口,变化大咩?php internal初学者,从PHP4Delphi(一个上古项目,只支持php5)那边爬过来的。

file does not recognize sub-command TOUCHs:open

CMake Error at cmake/modules/CheckUtils.cmake:672 (file):
  file does not recognize sub-command TOUCH
Call Stack (most recent call first):
  cmake/modules/DetectHostEnvironment.cmake:450 (polar_check_func_utime_null)
  CMakeLists.txt:176 (include)

os: windows+wsl(ubuntu 18.04)

polar --ini can not execute

# polar --ini
can't execute here
UNREACHABLE executed at /polarphp/artifacts/lib/Commands.cpp:294!
Stack dump:
0.      Program arguments: polar
/usr/local/bin/../lib64/libPolarUtils.so.0(_ZN5polar5utils17print_stack_traceERNS0_12RawOutStreamE+0x33)[0x7f9f4fd4425c]
/usr/local/bin/../lib64/libPolarUtils.so.0(+0x3382bc)[0x7f9f4fd442bc]
/usr/local/bin/../lib64/libPolarUtils.so.0(_ZN5polar5utils19run_signal_handlersEv+0x7f)[0x7f9f4fcb240b]
/usr/local/bin/../lib64/libPolarUtils.so.0(+0x337eef)[0x7f9f4fd43eef]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x110c0)[0x7f9f507ce0c0]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcf)[0x7f9f4ebfdfff]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x16a)[0x7f9f4ebff42a]
/usr/local/bin/../lib64/libPolarUtils.so.0(+0x24dfa9)[0x7f9f4fc59fa9]
polar[0x45b2ef]
polar[0x427ad7]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x7f9f4ebeb2e1]
polar[0x4276aa]
Aborted (core dumped)

just a little question

that project result can runing windows?
I think Windows support is a good choice.
Wish the project better and better.

内置包管理器 疑问

image
弱弱问一句,为什么要造这个轮子。php现有生态的composer这么成熟了,为什么不用

屌炸天了!

屌炸天了!为什么不做了, 做出来可以称霸世界

有点疑惑

看了下春哥最近的commit竟然把zendvm给删了 !不禁有点疑问 : 春哥以后对polarphp的定位是hack对PHP修修补补勉强使用,还是准备拿PHP的一些语法跟特性再造门全新的语言? @zzusoftboy

polar -r fail

shell : polar -r "echo 'test';\n"
error: can't execute here UNREACHABLE executed at /polarphp/artifacts/lib/Commands.cpp:294! Stack dump: 0. Program arguments: polar /usr/local/bin/../lib64/libPolarUtils.so.0(_ZN5polar5utils17print_stack_traceERNS0_12RawOutStreamE+0x33)[0x7f94d1ef725c] /usr/local/bin/../lib64/libPolarUtils.so.0(+0x3382bc)[0x7f94d1ef72bc] /usr/local/bin/../lib64/libPolarUtils.so.0(_ZN5polar5utils19run_signal_handlersEv+0x7f)[0x7f94d1e6540b] /usr/local/bin/../lib64/libPolarUtils.so.0(+0x337eef)[0x7f94d1ef6eef] /lib/x86_64-linux-gnu/libpthread.so.0(+0x110c0)[0x7f94d29810c0] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcf)[0x7f94d0db0fff] /lib/x86_64-linux-gnu/libc.so.6(abort+0x16a)[0x7f94d0db242a] /usr/local/bin/../lib64/libPolarUtils.so.0(+0x24dfa9)[0x7f94d1e0cfa9] polar[0x45b2ef] polar[0x427ad7] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x7f94d0d9e2e1] polar[0x4276aa] Aborted (core dumped)

docker镜像编译失败

copying docker files ...
checking polarphp base image ...
Sending build context to Docker daemon 3.415MB
Step 1/5 : FROM gcc:8.2.0
Get https://registry-1.docker.io/v2/library/gcc/manifests/8.2.0: unauthorized: incorrect username or password
prepare polarphp source files ...
tar project files ...
building polarphp image ...
Sending build context to Docker daemon 3.415MB
Step 1/5 : FROM polarphp_base_env:latest
Get https://registry-1.docker.io/v2/library/polarphp_base_env/manifests/latest: unauthorized: incorrect username or password

llvm? clang!

看最近的git提交记录,这是要作编译的节奏吗?^ . ^

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.