问题标签 [rakudo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
194 浏览

arrays - 关于懒惰 [ RAKU ]

在 Raku 文档中指出,收集-获取构造正在被惰性评估。在以下示例中,我很难得出关于构造的惰性的结论:

在第一种情况下(将 Seq 分配给 @f1),如果我们去掉“惰性”定义,那么生成的序列(使用 collect-take)将永远运行(不是惰性)。

在第二种情况下(将 Seq 分配给 @f2)@f2 变得懒惰。

为什么我们在行为上有差异?尽管我们尝试做同样的事情:以惰性方式将 Seq 分配给数组

有人可以澄清一下吗???

0 投票
1 回答
249 浏览

openssl - 为什么在 MacOS Catalina 上使用 Cro 时 Raku 会因“中止陷阱:6”而崩溃?

我正在使用 macOS Catalina 并尝试执行一个简单的命令raku -e "use Cro::HTTP::Route"。我将[1] 19228 abort raku在 Zsh shell 或Abort trap: 6Bash shell 中收到一条消息。使用 OpenSSL 模块(如raku -e "use OpenSSL::Stack".

0 投票
2 回答
230 浏览

raku - 解构对列表

考虑

按预期工作。然而,

投掷

这是一个错误还是我错过了什么?

这是 Rakudo Star 版本 2019.03.1,基于 MoarVM 版本 2019.03 实现 Perl 6.d。

0 投票
1 回答
185 浏览

perl - 为 Raku 构建多个后端失败

在阅读README.mdhttps://github.com/rakudo/rakudo之后,我开始冒险为 rakudo 构建多个后端。

我使用 64 位 Ubuntu 20.04 来做到这一点。首先我安装

  • build essential,libencode-perl
  • default-jdk准备编译 rakudo 的机器。

克隆 repo 后,当我运行命令时perl Configure.pl --backends=moar,jvm --prefix=/usr,出现以下错误:

如何修复?

我想知道ALL命令perl Configure.pl --backends=ALL中指的是什么。

这里这里有一个项目(我猜还是在 master 中合并了)Rakudo.js 。这是 Javascript 后端吗?这是否意味着,和后端?ALLmoarjvmJavascript

0 投票
1 回答
285 浏览

raku - 带有自定义词法分析器的 Raku 语法

是否有可能为 raku 语法定义自定义词法分析器,即将字符串转换为 int id + 值流?我在玩语法结构。

规则看起来很直观,因为它们可能在递归下降解析器中转换为函数。但是,令牌和正则表达式我希望能够使用显式令牌 ID 和接口将它们映射到名称以便我可以编写自己的词法分析器?

0 投票
1 回答
243 浏览

benchmarking - 如何对 Raku 进行基准测试?

0 投票
4 回答
191 浏览

string - 将字符串拆分为固定长度的块并在 Raku 中的单独行中写入

我有一个文件test.txt

我想读取这个文件并写入另一个文件out.txt,每行包含三个字符,例如

我做了什么

当字符串的长度不是 3 的倍数时,这运行良好。当字符串长度是 3 的倍数时,它会在输出文件的末尾插入额外的换行符。当字符串长度是 3 的倍数时,如何避免在末尾插入新行?

我尝试了另一种更短的方法,

它仍然存在同样的问题。

我在这里寻找,在这里但仍然无法解决。

0 投票
3 回答
117 浏览

raku - 为什么 Rakudo dd 为类型化和分配的标量返回 Nil?

下面是使用 Rakudo 的 REPL 会话。

为什么Nil输出的第二行有一个dd

0 投票
1 回答
82 浏览

raku - 重载包函数以检测未使用任何参数

我正在尝试重载一个函数以检测没有传递任何参数:

如果您尝试使用multi main (*@args) {}它也将不起作用。但是,如果您删除第一个multi MAIN定义,一切都会顺利进行。知道如何解决吗?

0 投票
2 回答
202 浏览

require - require 的行为(静态 + 动态)[ RAKU ]

我的问题与require与所需命名空间的静态或动态分辨率一起使用时的行为有关。

我将尝试表达我对事物的理解:

[ 1 ] 将“require”与文字一起使用

在这种情况下,编译器会检查 MODULE 是否已被声明为符号。如果没有,编译器声明它,并将它绑定到一个空的占位符包,它只是为这个“要求”创建的

[ 2 ] 将“require”与字符串一起使用

在这种情况下,“require”试图(在运行时)查找由字符串中声明的文件名定义的文件。如果找到(具有适当的内容:模块、包等),则它会在当前范围内创建一个名称空间,并将其与文件的内容一起加载。

[ 3 ] 在动态查找中使用“require”

在我看来,在这种情况下,“require”的行为不是“正常”的子程序。

当我们将“require”与“动态查找”一起使用时,动态查找的核心功能将“融合”在一个新的例程中,该例程的行为与我们预期的不同。

事实是“动态查找”例程的结果不是符号就是失败。

如果“require”的行为类似于“正常”子例程,那么它可以使用的唯一输入将是其后的动态查找的结果(命名空间或失败)。

但事实上,在失败的情况下(作为动态查找的结果),“require”会继续在存储库中搜索适当的包(通常情况下,使用我们为动态查找提供的参数: '模块')。

因此,从这个意义上说,显然“要求”的行为不像“正常”子程序。

根据我的思路,require + 动态查找的组合类似于以下构造:

我关心的是我对案例[3]的理解。

require + 动态查找如何工作?(从分析上讲 - 编译器首先遵循的步骤是什么,然后是运行时?)

[ 后记 ]

我同意@raiph 的观点,“require”不是一个子例程,它与语言深度集成。

从这个意义上说,在 require “指令”之后的“动态查找结构”用于两件事:

  1. 通知编译器构造是“动态的”(所以不要在编译时修复任何东西)

  2. 提供将用于搜索符号、命名空间、文件或存储库内容的字符串

@raiph 表示他认为“require”在成功加载后会进行查找。

我对此的唯一反对意见是,当我们加载同一个库时,“require”不会引发任何异常。

它是否默默地忽略了加载的库?当它可以首先检查同一个命名空间是否已经在使用时,为什么还要费心做这么多工作呢?

相反,当我们假设我们加载了一个不同的库时,它会抛出一个异常:正在使用的符号的“重复定义”。

为了证明我进行了以下操作:

在 ./lib 目录中,我放置了两个库,“foo.pm6”是“foo”的单元定义,其中定义了 A 类:

和另一个库“other.pm6”,这次在“foo”的定义中定义了一个不同的类 B。

raku 程序文件包含以下内容:

从上面的示例中我们看到,当我们尝试重新加载 foo 命名空间时,它隐藏在具有不同名称的文件中(只是为了欺骗 raku),它会引发异常。

因此我得出结论,也许“需要”首先检查与提供的字符串同名的命名空间。

顺便说一句,检查一下,我偶然发现了一个奇怪的行为。如下:

如果我们使用“使用 foo;” 在 line: "Initial package loading" 而不是 "require ::('foo') ;" 中,我们得到以下结果:

在 (3) 中查找 'foo::A' 没有找到任何东西!

此外,如果我使用以下内容更改库文件:“other.pm6”(A 类而不是 B - 如 foo.pm6 中)

结果似乎恢复到预期:

是错误还是我缺少的其他东西?