【问题标题】:Does Raku always parse?Raku 总是解析吗?
【发布时间】:2020-02-03 09:26:13
【问题描述】:

乐-版本 这是基于 MoarVM 版本 2020.01.1 构建的 Rakudo 版本 2020.01 实现 Perl 6.d。

目前看来我无法启动任何 Raku Perl6 程序 运行时间低于约 130 毫秒(主要是启动时间)。
- Raku 是否总是在程序启动时重新解析完整的源代码?
- Raku 是否缓存任何字节码?
- 所以即使是在线用户也总是需要 >= 130 毫秒?

time raku --stagestats hello_world.pl
Stage start      :   0.000
Stage parse      :   0.133
Stage syntaxcheck:   0.000
Stage ast        :   0.000
Stage optimize   :   0.002
Stage mast       :   0.006
Stage mbc        :   0.001
Stage moar       :   0.000
hello world
hello world
TEST
hello world

real    0m0,183s
user    0m0,231s
sys 0m0,016s

【问题讨论】:

  • time raku --stagestats -e '' 给我0.137 用于解析阶段。所以这显然与实际解析文件所需的时间无关。

标签: performance raku moarvm


【解决方案1】:

Raku 是否总是在程序启动时重新解析完整的源代码?

如果你的意思是你的脚本?是的。目前只有模块被预编译。

如果您是指整个 Raku 设置?不,那么你会看到 100 倍以上。

Raku 是否缓存任何字节码?

已安装的模块和通过-Ilib 访问的模块缓存在.precomp 目录中。

所以即使是在线用户也总是需要 >= 130 毫秒?

在我的机器上大约是 120 毫秒。但是,是的,在那个球场。在这个时间点。部分原因是在启动时进行了一些初始化:尽管已经采取了很多措施来确保在启动时没有进行不必要的初始化,但这并没有像 Perl 那样经过多年的审查。

如果您将其与例如Perl,您应该意识到 Raku 内置了 Moose。如果您在我的机器上运行 perl -MMoose -e '',启动时间仅比 Raku 低几毫秒。

【讨论】:

  • 请将此与其他语言和虚拟机进行比较。在 Parsing 阶段浪费超过 100 毫秒是没有意义的!
  • 正如 jnthn 在#raku 上所说,时间显示为解析时间,但很可能主要是加载 Raku 解析器来解析您的源代码,不是实际上解析您的代码.您可能会争辩说这是 --stagestats 代码中的一个错误。
  • @PeterBauer “没有意义!”目前尚不清楚您(和/或您的支持者)的意思是“我一定误解了实际发生的事情”或“你一定误解了我们用户的需求”或其他什么。 (一旦澄清,就会更容易减少误解。正如 Liz 的评论希望澄清的那样,如果您所说的“解析阶段”是解析时间,那么您误解了 Liz 答案的这方面。如果您意思是“运行时之前的最短时间”,那么您可能误解了 Liz 回答的“仅……当前……此时”方面。等等)
猜你喜欢
  • 2013-06-10
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
相关资源
最近更新 更多