PHP超集语言PXP『Rust』

2024-08-27 20:03:00 浏览数 (2)

PXP是什么? PXP(PXP:扩展预处理器)是一系列工具和库的集合,旨在使PHP编程语言的使用更加愉快和高效。

PHP语言已经存在近30年。在这段时间里,它经历了显著的演变,但我们相信仍有改进的空间。PXP是尝试解决PHP的一些不足,并使其成为一种更现代、更强大、更面向开发者的语言。

实际上,PXP不仅仅是一个“东西”——它是一组协同工作的不同工具,为PHP开发者提供更好的开发体验。

PXP的目标是快速且可靠。现代版本的PHP已经相当快了,但对于静态分析和自动完成等功能,我们需要能够快速解析和理解PHP代码。

这就是为什么PXP被开发为一个混合系统,由极快的Rust代码和更简单、更灵活的PHP代码组合而成。Rust用于处理繁重的任务,如解析、类型推断等;而PHP则用于处理更高级别的任务,如代码格式化、重构、美化打印等。

这意味着PXP核心开发有时需要同时了解Rust和PHP,但我们认为这是值得的,以便提供最佳性能。

超集语言

这是项目的起点。该项目旨在创建一种与PHP向后兼容的新语言,同时引入新的语言特性和语法,以改善开发者的体验。

下面是一些超集语言可能看起来像什么的例子:

多行简短闭包
代码语言:javascript复制
$add = fn (int $a, int $b) {
    // ...
};
类型别名
代码语言:javascript复制
type Label = string | Closure | null;

trait HasLabel
{
    protected Label $label;

    public function label(Label $label)
    {
        //
    }

    public function getLabel(): Label
    {
        return $this->label;
    }
}
泛型
代码语言:javascript复制
class Collection<K, V> implements ArrayAccess<K, V>
{
    protected array<K, V> $items = [];

    public function offsetGet(K $key): V
    {
        return $this->items[$key];
    }

    // ...
}
模式匹配
代码语言:javascript复制
$point = new Point(x: 1, y: 2);

echo match ($point) {
    Point { y: 1 } => 'Y is 1!',
    Point { y: $y } => "Y is {$y}!",
}

语言服务器

语言服务器是一个为代码编辑器提供代码信息的工具。它支持诸如自动完成、跳转到定义和重构等功能。

由于PXP涉及构建一个新的超集语言,我们需要一个语言服务器来提供现代代码编辑器所期望的所有酷功能。一个超级快速、超级可靠的语言服务器对于良好的开发者体验至关重要,因此我们正在投入大量精力来确保我们的语言服务器是最好的。

我们正在创建一个超集语言也意味着这个项目惠及所有PHP开发者,而不仅仅是使用PXP的开发者。

静态分析器

构建静态分析器也是项目的重要组成部分。语言服务器需要某种形式的类型推断(或类型推导)。如果我们已经在做这件事,那么我们不妨也构建一个静态分析器!

现在,您应该开始看到这些项目是如何相互关联以及它们之间可以共享多少代码了。

代码格式化程序和Linter

同样,我们正在构建一种新语言,因此我们需要一种方法来使我们的代码看起来很棒。与语言服务器和静态分析器一样,代码格式化器和Linter也将建立在相同的核心库之上。

它不仅会帮助PXP用户,还会帮助所有PHP开发者。

关于作者

嗨,我叫Ryan!我是PXP背后的那个人。我已经做了好几年的PHP开发者,但我一直对其他软件开发领域,如编程语言设计、编译器和静态分析,非常感兴趣。

我启动PXP是为了解决自己的问题——我希望在使用PHP时获得更好的开发体验,而我认为实现这一目标的最佳方式是自己构建工具。

目前只有我一个人在从事这个项目,但一旦事情开始有起色,我希望能够吸引更多的人加入并帮忙。

0 人点赞