Raku 编程/实现
- Pugs
- 是第一个或多或少功能完整的 Raku 实现。它是由 Audrey Tang 使用 Haskell 语言编写的。现在它主要具有历史意义。
- Niecza
- 一个使用 .net 框架实现的 Raku。
- Rakudo
- Raku 的领先高级实现。它是自托管的,这意味着它主要用 Raku 和 Raku 的子语言 nqp 编写。它针对多个进程虚拟机:Parrot、JVM、MoarVM,以及不久的将来可能还有其他一些(JavaScript、Lua 等)。
截至 2014 年 4 月,在 MoarVM 上运行的 Rakudo 是最有希望的实现。它完全是免费的开源软件,使用专门为 Raku 设计的 VM。
经过一段时间的语言设计后,是时候开始创建新语言的实现了。为了避免 Perl 的问题,最初的组织者决定在后端执行引擎和前端语言解析器之间创建更好的分离。经过多次讨论,Parrot 虚拟机 项目启动,目的是为像 Raku 这样的动态语言创建一个虚拟机。Parrot 迅速发展,不再依赖 Raku,而是选择成为所有动态语言的虚拟机。由于 Raku 规模庞大且雄心勃勃,任何能够支持它的虚拟机也能够很好地支持许多其他动态语言。
Perl 黑客 Audrey Tang 使用 Haskell 编程语言编写了一个 Raku 的参考实现。这个实现被称为 Pugs,它作为语言设计师开发的许多想法的测试平台。来自 Pugs 团队的反馈帮助塑造了语言设计,而语言设计的变化导致了 Pugs 的修改。这是一种有用且有益的关系,尤其是在当时没有其他实现处于如此高的开发状态的情况下。
Raku 的“官方”语法将用 Raku 本身编写。这是因为 Raku 被设计成拥有当时任何现有语言中最先进的语法引擎之一。对于如此先进的语言,没有比它本身更好的语法实现选择。STD.pm 被创建为标准的 Raku 语法,并且在各种实现出现冲突时仍然被引用。
STD_red 是使用 Ruby 编程语言实现的 Raku 语法。STD_blue 是一个用 Perl 编写的、更新的 STD.pm 编译器。
ELF 是一个引导式的 Raku 实现,它使用 STD_blue 将 Raku 代码编译成 Perl 代码以供执行。
然而,当 Audrey Tang 离开 Pugs 项目后,它的开发降至最低。它仍然对测试和参考有用,但 Pugs 不再是曾经的活跃开发平台。但是,Parrot 从那时起有了长足的发展,并最终准备好开始支持高级语言的编译器。一个名为“Rakudo”的 Raku 项目启动,并开始迅速发展。Rakudo 项目的一部分是 Patrick Michaud 创建的高级解析器工具,称为 PCT(“Parrot 编译器工具”)。PCT 是一种类似于低级 Flex 和 Bison 工具的解析器生成工具。然而,PCT 使用 Raku 语言的一个子集来编写解析器,而不是使用 C 或 C++。这意味着 Rakudo 正在成为自托管:Rakudo 编译器本身部分用 Raku 编写。
有关 Rakudo 的更多信息,请访问 http://www.rakudo.org